[jbossseam-issues] [JBoss JIRA] Commented: (JBSEAM-2615) POJO does not get outjected in the page context as expected
Sebastien Degardin (JIRA)
jira-events at lists.jboss.org
Mon Feb 18 19:17:26 EST 2008
[ http://jira.jboss.com/jira/browse/JBSEAM-2615?page=comments#action_12399799 ]
Sebastien Degardin commented on JBSEAM-2615:
--------------------------------------------
This is for a Faces Response, of course !!!
But, the difference with JSF RI's navigation handler is that it doesn't "redirect" for a faces response where Seam's Navagation Handler does !
Here is the Seam's Navigation handler relevant method :
@Override
public void handleNavigation(FacesContext context, String fromAction, String outcome)
{
if ( !context.getResponseComplete() ) //workaround for a bug in MyFaces
{
if ( isOutcomeViewId(outcome) )
{
FacesManager.instance().interpolateAndRedirect(outcome);
}
else if ( Init.instance().isJbpmInstalled() && Pageflow.instance().isInProcess() && Pageflow.instance().hasTransition(outcome) )
{
Pageflow.instance().navigate(context, outcome);
}
else if ( !Pages.instance().navigate(context, fromAction, outcome) )
{
baseNavigationHandler.handleNavigation(context, fromAction, outcome);
}
}
}
As far is i know, all the case end by calling a redirect.
at least, that's what it does with the given example, seam-blog and Seam booking.
> POJO does not get outjected in the page context as expected
> -----------------------------------------------------------
>
> Key: JBSEAM-2615
> URL: http://jira.jboss.com/jira/browse/JBSEAM-2615
> Project: JBoss Seam
> Issue Type: Bug
> Components: Core
> Affects Versions: 2.0.1.GA
> Environment: Seam 2.0.1, RichFaces 3.1.4, JBoss AS 4.2, Sun JSF 1.2 RI, Facelets
> Reporter: fredatwork
> Fix For: 2.0.2.GA, 2.1.0.GA
>
>
> I described what I believe is a bug regarding the seam page context. See http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4128529 .
> In brief, a POJO with page context got not outjected as expected.
> Please consider the following sample (code id pasted below) and use it as described in the forum topic referenced above.
> View sample2.seam first in your favorite browser. Once the start button is pressed, sample2next.xhtml renders a counter at 0 . However, the Sample2Action.init action initiated this counter to 1 . Everything happens as the completion of Sample2Action.init does not outject the POJO Sample2Context to the PAGE context, and the action Sample2Action.refresh retrieves a newly created object.
> Same thing happens with the following modifications to the Sample2Action component (POJO object is not auto-created, init method does it explicitely):
> // Page context object
> @In(value="Sample2Context", scope=ScopeType.PAGE, required=false)
> @Out(value="Sample2Context", scope=ScopeType.PAGE, required=true)
> private Sample2Context context;
> /**
> * @see sample2.Sample2Local#init()
> */
> public void init() {
> context = new Sample2Context ();
> context.increment();
> facesMessages.add(FacesMessage.SEVERITY_INFO, "Initiated page context " + context);
> System.out.println("Initiated page context " + context);
> }
> PS: I keep a safe-copy of Eclipse projects with the sources below, in case someone needs them (cannot attach zip files to this bug report)
> Fred ( fredatwork at free.fr )
> *****************************************************************************************************************************
> Sample2Local.java
> *****************************************************************************************************************************
> package sample2;
> import javax.ejb.Local;
> /**
> * Sample 2 interface
> * @author fredatwork
> *
> */
> @Local
> public interface Sample2Local {
> public void init();
>
> public void refresh();
>
> public void remove();
> }
> *****************************************************************************************************************************
> Sample2Bean.java
> *****************************************************************************************************************************
> package sample2;
> import javax.ejb.Remove;
> import javax.ejb.Stateless;
> import javax.faces.application.FacesMessage;
> import org.jboss.seam.ScopeType;
> import org.jboss.seam.annotations.Begin;
> import org.jboss.seam.annotations.End;
> import org.jboss.seam.annotations.In;
> import org.jboss.seam.annotations.Name;
> import org.jboss.seam.annotations.Out;
> import org.jboss.seam.contexts.Contexts;
> import org.jboss.seam.faces.FacesMessages;
> /**
> * Sample 2
> * @author fredatwork
> *
> */
> @Stateless(name="Sample2Action")
> @Name("Sample2Action")
> public class Sample2Bean implements Sample2Local {
> // Page context object
> @In(value="Sample2Context", create=true, required=false)
> @Out(value="Sample2Context", scope=ScopeType.PAGE, required=true)
> private Sample2Context context;
>
> // Messages
> @In
> private FacesMessages facesMessages;
>
> /**
> * @see sample2.Sample2Local#init()
> */
> public void init() {
> context.increment();
> facesMessages.add(FacesMessage.SEVERITY_INFO, "Initiated page context " + context);
> System.out.println("Initiated page context " + context);
> }
> /**
> * @see sample2.Sample2Local#refresh()
> */
> public void refresh() {
>
> Object object = Contexts.lookupInStatefulContexts("Sample2Context");
> System.out.println("Context object : " + object);
> Object pageObject = Contexts.getPageContext().get("Sample2Context");
> System.out.println("Page context object : " + pageObject);
>
> System.out.println("In refresh with : " + context);
> context.increment();
> System.out.println("Incremented page context " + context);
> facesMessages.add(FacesMessage.SEVERITY_INFO, "Incremented page context " + context);
> }
> /**
> * @see sample2.Sample2Local#remove()
> */
> @Remove
> public void remove() {
> }
>
> }
> *****************************************************************************************************************************
> Sample2Context.java
> *****************************************************************************************************************************
> package sample2;
> import java.io.Serializable;
> import org.jboss.seam.annotations.Name;
> /**
> * @author fredatwork
> *
> */
> public class Sample2Context implements Serializable {
> private int counter;
> /**
> * @return the counter
> */
> public int getCounter() {
> return counter;
> }
> /**
> * @param counter the counter to set
> */
> public void setCounter(int counter) {
> this.counter = counter;
> }
> /**
> * Increment counter by 1
> */
> public void increment() {
> counter++;
> }
>
> /**
> * @see java.lang.Object#toString()
> */
> @Override
> public String toString() {
> return "[Context = " + counter + "]";
> }
>
> }
> *****************************************************************************************************************************
> sample2.xhtml
> *****************************************************************************************************************************
> <?xml version="1.0" encoding="iso-8859-1"?>
> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
> <html xmlns="http://www.w3.org/1999/xhtml"
> xmlns:ui="http://java.sun.com/jsf/facelets"
> xmlns:h="http://java.sun.com/jsf/html"
> xmlns:f="http://java.sun.com/jsf/core"
> xmlns:s="http://jboss.com/products/seam/taglib">
> <head>
> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" lang="fr"/>
> <title>Sample2</title>
> </head>
> <body>
> <h:form>
>
> <h:messages/>
> <h:commandButton action="#{Sample2Action.init}" value="Start"></h:commandButton>
>
> </h:form>
> </body>
> </html>
> *****************************************************************************************************************************
> sample2next.xhtml
> *****************************************************************************************************************************
> <?xml version="1.0" encoding="iso-8859-1"?>
> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
> <html xmlns="http://www.w3.org/1999/xhtml"
> xmlns:ui="http://java.sun.com/jsf/facelets"
> xmlns:h="http://java.sun.com/jsf/html"
> xmlns:f="http://java.sun.com/jsf/core"
> xmlns:s="http://jboss.com/products/seam/taglib">
> <head>
> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" lang="fr"/>
> <title>Sample2Next</title>
> </head>
> <body>
> <h:form>
>
> <h:messages/>
>
> <h:outputLabel value="Counter :"/>
> <h:outputText value="#{Sample2Context.counter}"/>
> <h:commandButton value="Refresh" action="#{Sample2Action.refresh}"/>
>
> </h:form>
> </body>
> </html>
> *****************************************************************************************************************************
> components.xml
> *****************************************************************************************************************************
> <?xml version="1.0" encoding="UTF-8"?>
> <components xmlns="http://jboss.com/products/seam/components"
> xmlns:core="http://jboss.com/products/seam/core"
> xmlns:security="http://jboss.com/products/seam/security"
> xmlns:transaction="http://jboss.com/products/seam/transaction"
> xmlns:mail="http://jboss.com/products/seam/mail"
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> xsi:schemaLocation=
> "http://jboss.com/products/seam/core http://jboss.com/products/seam/core-2.0.xsd
> http://jboss.com/products/seam/transaction http://jboss.com/products/seam/transaction-2.0.xsd
> http://jboss.com/products/seam/security http://jboss.com/products/seam/security-2.0.xsd
> http://jboss.com/products/seam/components http://jboss.com/products/seam/components-2.0.xsd">
> <core:init jndi-pattern="sample/#{ejbName}/local"
> debug="true"/>
> <core:manager conversation-timeout="120000"
> concurrent-request-timeout="500"
> conversation-id-parameter="cid"/>
> <transaction:ejb-transaction/>
>
> </components>
> *****************************************************************************************************************************
> faces-config.xml
> *****************************************************************************************************************************
> <?xml version="1.0" encoding="UTF-8"?>
> <faces-config
> xmlns="http://java.sun.com/xml/ns/javaee"
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"
> version="1.2">
>
> <!-- Application setting -->
> <application>
> <locale-config>
> <default-locale>fr</default-locale>
> <supported-locale>en</supported-locale>
> </locale-config>
> </application>
>
> </faces-config>
> *****************************************************************************************************************************
> pages.xml
> *****************************************************************************************************************************
> <?xml version="1.0" encoding="UTF-8"?>
> <pages xmlns="http://jboss.com/products/seam/pages"
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> xsi:schemaLocation="http://jboss.com/products/seam/pages http://jboss.com/products/seam/pages-2.0.xsd"
> >
>
> <!-- ************************************************************************************* -->
> <!-- Wilcard -->
> <!-- ************************************************************************************* -->
> <page view-id="*" >
>
> <navigation from-action="#{Sample2Action.init}">
> <redirect view-id="/sample2next.xhtml"/>
> </navigation>
>
> <navigation from-action="#{Sample3Action.init}">
> <redirect view-id="/sample3next.xhtml"/>
> </navigation>
>
> <navigation from-action="#{Sample4Action.init}">
> <redirect view-id="/sample4next.xhtml"/>
> </navigation>
>
> </page>
> <exception class="org.jboss.seam.NoConversationException">
> <redirect view-id="/no_conversation.xhtml"/>
> </exception>
>
> </pages>
> *****************************************************************************************************************************
> web.xml
> *****************************************************************************************************************************
> <?xml version="1.0" encoding="UTF-8"?>
> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
> <display-name>sample</display-name>
>
> <context-param>
> <param-name>org.ajax4jsf.VIEW_HANDLERS</param-name>
> <param-value>com.sun.facelets.FaceletViewHandler</param-value>
> </context-param>
> <context-param>
> <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
> <param-value>client</param-value>
> </context-param>
> <context-param>
> <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
> <param-value>.xhtml</param-value>
> </context-param>
> <context-param>
> <param-name>facelets.REFRESH_PERIOD</param-name>
> <param-value>2</param-value>
> </context-param>
> <context-param>
> <param-name>facelets.DEVELOPMENT</param-name>
> <param-value>true</param-value>
> </context-param>
> <context-param>
> <param-name>com.sun.faces.validateXml</param-name>
> <param-value>false</param-value>
> </context-param>
> <context-param>
> <param-name>com.sun.faces.verifyObjects</param-name>
> <param-value>false</param-value>
> </context-param>
> <context-param>
> <param-name>org.richfaces.SKIN</param-name>
> <param-value>DEFAULT</param-value>
> </context-param>
>
> <!-- Seam -->
>
> <listener>
> <listener-class>org.jboss.seam.servlet.SeamListener</listener-class>
> </listener>
>
> <servlet>
> <servlet-name>Seam Resource Servlet</servlet-name>
> <servlet-class>org.jboss.seam.servlet.SeamResourceServlet</servlet-class>
> </servlet>
> <servlet-mapping>
> <servlet-name>Seam Resource Servlet</servlet-name>
> <url-pattern>/seam/resource/*</url-pattern>
> </servlet-mapping>
> <filter>
> <filter-name>Seam Filter</filter-name>
> <filter-class>org.jboss.seam.servlet.SeamFilter</filter-class>
> </filter>
> <filter-mapping>
> <filter-name>Seam Filter</filter-name>
> <url-pattern>/*</url-pattern>
> </filter-mapping>
>
> <!-- JSF -->
> <servlet>
> <servlet-name>Faces Servlet</servlet-name>
> <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
> <load-on-startup>1</load-on-startup>
> </servlet>
> <servlet-mapping>
> <servlet-name>Faces Servlet</servlet-name>
> <url-pattern>*.seam</url-pattern>
> </servlet-mapping>
>
> <!-- Session configuration -->
> <session-config>
> <session-timeout>1</session-timeout>
> </session-config>
>
> </web-app>
> *****************************************************************************************************************************
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the seam-issues
mailing list