Out-jected variables available for rendering but not for submit
brma Jun 26, 2008 10:49 PMDear all,
I'm meanwhile some weeks with Seam and it seams to be a great framework - however, there is an issue i'm not managing to resolve for more than a week now.
My configuration:
- JBoss 4.2.2.GA
- Seam 2.0.2 SP1
My issue:
in my application there are two entities (Portfolio, PortfolioTargetBSC) which have a one-to-one JTA relation - Portfolio is the leading part. I have a form for every entity for editing the details. There is a button in portfolio.xhtml (editing page for Portfolio) that calls the function begin(portfolio) in the action bean that prepares PortfolioTargetBSC (PortfolioTargetBSCAction). After the preparation the request is redirected via pages.xml to targetPortfolioBSC.xhtml. The context variables are filled and the information is rendered correctly (can be seen in the form) in targetPortfolioBSC.xhtml but when the page is submitted later on the error says that portfolioTargetBSC what was out-jected before cannot be found in the context.
Further interesting is that I explicitely start a long term conversation with @Begin but the log says the stateful bean is destroyed - also debug.seam shows no conversation... any help would be highly appreciated.
Source files are below:
PortfolioTargetBSCActionBean.java
@Stateful @Name("portfolioTargetBSCAction") public class PortfolioTargetBSCActionBean implements PortfolioTargetBSCActionInterface { @Logger private Log log; @PersistenceContext(type = EXTENDED) private EntityManager em; @In(required = false) @Out(required = false) private Portfolio bscPortfolio; @In(required = false) @Out(required = true) private PortfolioTargetBSC portfolioTargetBSC; public PortfolioTargetBSCActionBean() { } @Begin public void begin(Portfolio pPortfolio) { this.bscPortfolio = em.find(Portfolio.class, pPortfolio.getId()); portfolioTargetBSC = bscPortfolio.getPortfolioTargetBSC(); } @End public String update() { bscPortfolio.setPortfolioTargetBSC(portfolioTargetBSC); bscPortfolio = em.merge(bscPortfolio); return ("success"); } @End public String cancel() { return ("success"); } @Remove @Destroy public void destroy() { log.info("Why am I dead???"); } }
Target xhtml-file (targetPortfolioBSC.xhtml) - rendered correctly but throws exception at submit:
<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:s="http://jboss.com/products/seam/taglib" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:a4j="http://richfaces.org/a4j" xmlns:rich="http://richfaces.org/rich" template="layout/template.xhtml"> <ui:define name="body"> <h:messages globalOnly="true" styleClass="message" /> <h:form id="bscForm"> <rich:panel> <f:facet name="header">BSC Targets for Portfolio: #{bscPortfolio.name}</f:facet> <div class="actionButtons"><h:commandButton value="Save" action="#{portfolioTargetBSCAction.update}" /> <a4j:commandButton value="Cancel" action="#{portfolioTargetBSCAction.cancel}" bypassUpdates="true" /></div> <div><rich:panel> <f:facet name="header">Financials</f:facet> <s:decorate template="layout/edit.xhtml"> <ui:define name="label">IT investments</ui:define> <h:selectOneMenu value="#{portfolioTargetBSC.titInvestments}"> <s:selectItems value="#{portfolioTargetBSC.typeTarget}" var="targetType" label="#{targetType}" /> </h:selectOneMenu> <rich:spacer height="10" width="10" /> <h:inputText required="false" value="#{portfolioTargetBSC.itInvestments}" /> </s:decorate> ... </rich:panel></div> <div style="clear: both" /> </rich:panel> </h:form> </ui:define> </ui:composition>
Logfile:
... 2008-06-26 22:32:51,640 DEBUG [org.jboss.seam.Component] trying to inject with hierarchical context search: bscPortfolio 2008-06-26 22:32:51,640 DEBUG [org.jboss.seam.contexts.Contexts] found in conversation context: bscPortfolio 2008-06-26 22:32:51,640 DEBUG [org.jboss.seam.Component] trying to inject with hierarchical context search: portfolioTargetBSC 2008-06-26 22:32:51,640 DEBUG [org.jboss.seam.contexts.Contexts] found in conversation context: portfolioTargetBSC ... 2008-06-26 22:32:51,640 INFO [cc.brandstaetter.PPM.session.PortfolioTargetBSCActionBean] Why am I dead??? ... 2008-06-26 22:32:51,640 DEBUG [org.jboss.seam.core.Events] Processing event:org.jboss.seam.preSetVariable.bscPortfolio ... 2008-06-26 22:32:51,640 DEBUG [org.jboss.seam.core.Events] Processing event:org.jboss.seam.postSetVariable.bscPortfolio ... 2008-06-26 22:32:51,640 DEBUG [org.jboss.seam.core.Events] Processing event:org.jboss.seam.preSetVariable.portfolioTargetBSC ... 2008-06-26 22:32:51,640 DEBUG [org.jboss.seam.core.Events] Processing event:org.jboss.seam.postSetVariable.portfolioTargetBSC ... 2008-06-26 22:32:51,640 DEBUG [org.jboss.seam.core.Events] Processing event:org.jboss.seam.preRemoveVariable.portfolioTargetBSCAction ... 2008-06-26 22:32:51,640 DEBUG [org.jboss.seam.core.Events] Processing event:org.jboss.seam.postRemoveVariable.portfolioTargetBSCAction 2008-06-26 22:32:51,640 DEBUG [org.jboss.seam.ejb.RemoveInterceptor] Stateful component was removed: portfolioTargetBSCAction
Exception thrown at submit:
Exception during request processing: Caused by javax.servlet.ServletException with message: "/targetPortfolioBSC.xhtml @27,69 value="#{portfolioTargetBSC.titInvestments}": Target Unreachable, identifier 'portfolioTargetBSC' resolved to null" javax.faces.webapp.FacesServlet.service(FacesServlet.java:256) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:83) org.jboss.seam.web.MultipartFilter.doFilter(MultipartFilter.java:85) org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:64) org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:45) org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:141) org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:281) org.jboss.seam.web.Ajax4jsfFilter.doFilter(Ajax4jsfFilter.java:60) org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) org.jboss.seam.web.LoggingFilter.doFilter(LoggingFilter.java:58) org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) org.jboss.seam.debug.hot.HotDeployFilter.doFilter(HotDeployFilter.java:68) org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:158) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230) org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:179) org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:432) org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84) org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157) org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262) org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844) org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446) java.lang.Thread.run(Unknown Source)