Could someone please help me with getting a component initialized properly? I have read so many posts and tried many solutions with no avail.
Few things that I have leaned from the posts:
1. @Begin does not start a new conversation. It only promotes a short-running conversation to a long-running mode.
2. @Factory get called whenever your JSF EL code is trying to access a context variable that is null.
3. The variable that that gets initialized by the @Factory method might need to be annotated using @Out(scope=CONVERSATION)
Let me rephrase what I am currently doing. There three pages:
1. An input page called newentry.jsf that has a button which directs the user to confirmentry.jsf
2. A confirmation page called confimentry.jsf that show the date from newentry.jsf and ask the user to confirm or edit.
3. View result page called saveentry.jsf that tells the user whether the record was saved or not.
These three pages depend on a component called newEntry which happens to be an entity bean, Entry.java. This component gets created inside a stateful session bean, PostAction.java, with the help of the @Factory annotation. The session bean persists the entity bean once the user clicks the save button on the confirmentry.jsf page. Since jBPM is used to manage the page flow I had to add a method that triggers the beginning of the conversation and the name of the pageflow definition.
When I try to access newentry.jsf I get the first six lines below. Once I input some data and hit process I get two line from postAction in addition to the stacktrace:
21:00:47,163 INFO [PostAction] Creating a new empty entry
21:00:47,163 INFO [PostAction] Created a new empty entry
21:00:47,168 INFO [PostAction] Creating a new empty entry
21:00:47,169 INFO [PostAction] Created a new empty entry
21:00:47,173 INFO [PostAction] Creating a new empty entry
21:00:47,174 INFO [PostAction] Created a new empty entry
21:00:54,474 INFO [PostAction] Creating a new empty entry
21:00:54,474 INFO [PostAction] Created a new empty entry
21:00:54,475 ERROR [STDERR] Jul 16, 2006 9:00:54 PM com.sun.faces.lifecycle.ProcessValidationsPhase execute
WARNING: /newentry.xhtml @18,48 value="#{newEntry.title}": Target Unreachable, identifier 'newEntry' resolved to null
javax.el.PropertyNotFoundException: /newentry.xhtml @18,48 value="#{newEntry.title}": Target Unreachable, identifier 'newEntry' resolved to null
at com.sun.facelets.el.TagValueExpression.getType(TagValueExpression.java:62)
at com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getConvertedValue(HtmlBasicInputRenderer.java:129)
at javax.faces.component.UIInput.getConvertedValue(UIInput.java:943)
at javax.faces.component.UIInput.validate(UIInput.java:868)
at javax.faces.component.UIInput.executeValidate(UIInput.java:1078)
at javax.faces.component.UIInput.processValidators(UIInput.java:670)
at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1039)
at javax.faces.component.UIForm.processValidators(UIForm.java:229)
at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1039)
at javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:672)
at com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:100)
at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:266)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:132)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.jboss.seam.servlet.SeamExceptionFilter.doFilter(SeamExceptionFilter.java:45)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.jboss.seam.servlet.SeamRedirectFilter.doFilter(SeamRedirectFilter.java:30)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:175)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:432)
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:74)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(MasterSlaveWorkerThread.java:112)
at java.lang.Thread.run(Thread.java:595)
21:00:54,477 ERROR [STDERR] Jul 16, 2006 9:00:54 PM com.sun.faces.lifecycle.LifecycleImpl phase
WARNING: executePhase(PROCESS_VALIDATIONS 3,com.sun.faces.context.FacesContextImpl@1a2dbfc1) threw exception
javax.faces.FacesException: /newentry.xhtml @18,48 value="#{newEntry.title}": Target Unreachable, identifier 'newEntry' resolved to null
at com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:108)
at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:266)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:132)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.jboss.seam.servlet.SeamExceptionFilter.doFilter(SeamExceptionFilter.java:45)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.jboss.seam.servlet.SeamRedirectFilter.doFilter(SeamRedirectFilter.java:30)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:175)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:432)
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:74)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(MasterSlaveWorkerThread.java:112)
at java.lang.Thread.run(Thread.java:595)
Caused by: javax.el.PropertyNotFoundException: /newentry.xhtml @18,48 value="#{newEntry.title}": Target Unreachable, identifier 'newEntry' resolved to null
at com.sun.facelets.el.TagValueExpression.getType(TagValueExpression.java:62)
at com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getConvertedValue(HtmlBasicInputRenderer.java:129)
at javax.faces.component.UIInput.getConvertedValue(UIInput.java:943)
at javax.faces.component.UIInput.validate(UIInput.java:868)
at javax.faces.component.UIInput.executeValidate(UIInput.java:1078)
at javax.faces.component.UIInput.processValidators(UIInput.java:670)
at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1039)
at javax.faces.component.UIForm.processValidators(UIForm.java:229)
at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1039)
at javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:672)
at com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:100)
... 28 more
21:00:54,481 ERROR [SeamExceptionFilter] uncaught exception handled by Seam
javax.servlet.ServletException: /newentry.xhtml @18,48 value="#{newEntry.title}": Target Unreachable, identifier 'newEntry' resolved to null
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:256)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.jboss.seam.servlet.SeamExceptionFilter.doFilter(SeamExceptionFilter.java:45)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.jboss.seam.servlet.SeamRedirectFilter.doFilter(SeamRedirectFilter.java:30)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:175)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:432)
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:74)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(MasterSlaveWorkerThread.java:112)
at java.lang.Thread.run(Thread.java:595)
21:00:54,494 ERROR [[Faces Servlet]] Servlet.service() for servlet Faces Servlet threw exception
javax.el.PropertyNotFoundException: /newentry.xhtml @18,48 value="#{newEntry.title}": Target Unreachable, identifier 'newEntry' resolved to null
at com.sun.facelets.el.TagValueExpression.getType(TagValueExpression.java:62)
at com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getConvertedValue(HtmlBasicInputRenderer.java:129)
at javax.faces.component.UIInput.getConvertedValue(UIInput.java:943)
at javax.faces.component.UIInput.validate(UIInput.java:868)
at javax.faces.component.UIInput.executeValidate(UIInput.java:1078)
at javax.faces.component.UIInput.processValidators(UIInput.java:670)
at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1039)
at javax.faces.component.UIForm.processValidators(UIForm.java:229)
at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1039)
at javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:672)
at com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:100)
at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:266)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:132)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.jboss.seam.servlet.SeamExceptionFilter.doFilter(SeamExceptionFilter.java:45)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.jboss.seam.servlet.SeamRedirectFilter.doFilter(SeamRedirectFilter.java:30)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:175)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:432)
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:74)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(MasterSlaveWorkerThread.java:112)
at java.lang.Thread.run(Thread.java:595)
Excerpts of the source code and configuration files follows:
newentry.jsf
<ui:define name="content">
<div class="entry">
<h:form>
<s:validateAll>
<div>
<h:outputLabel for="title">Title: </h:outputLabel>
</div>
<div>
<h:inputText id="title" value="#{newEntry.title}"
size="70" maxlength="70" required="true"/>
<span class="errors"><h:message for="title"/></span>
</div>
<div>
<h:outputLabel for="excerpt">
Excerpt (optional):
</h:outputLabel>
</div>
<div>
<h:inputTextarea id="excerpt"
value="#{newEntry.excerpt}" cols="68" rows="3"/>
<span class="errors"><h:message for="excerpt"/></span>
</div>
<div>
<h:outputLabel for="body">Body text: </h:outputLabel>
</div>
<div>
<h:inputTextarea id="body" value="#{newEntry.body}"
cols="68" rows="20" required="true"/>
<span class="errors"><h:message for="body"/></span>
</div>
<div>
<h:commandButton value="Proceed" action="proceed"/>
</div>
</s:validateAll>
</h:form>
</div>
</ui:define>
Entry.java and PostAction.java
@Entity(name="gs_entry")
public class Entry {
@Id
@GeneratedValue(strategy=AUTO)
@Column(name="entry_id")
private int id;
@NotNull
@Length(max=70)
private String title;
@Length(max=200)
private String excerpt;
@NotNull
@Length(max=1400)
private String body;
@NotNull
@Column(name="post_date")
private Date postDate = new Date();
// @Length(max = 50)
// @JoinColumn(name="category_name", referencedColumnName="name")
@NotNull
@ManyToOne
@JoinColumn(name="categoryid", referencedColumnName="category_id")
private Category mycategory;
public Entry(){}
public Entry(Category category){
this.mycategory = category;
}
}
@Stateful
@Name("postAction")
public class PostAction implements PostActionInterface{
@In(create=true)
private Category category;
@In(create=true, value="entityManager")
private EntityManager em;
//@In(required=false)
//@Out(value="newEntry")
//@Out(value="newEntry", scope=ScopeType.CONVERSATION)
private Entry entry;
@Factory("newEntry")
//@Begin(pageflow="new-entry", join=true)
public void createNewEntry(){
log.info("Creating a new empty entry");
entry = new Entry(category);
if(entry == null){
log.info("The entry IS NULL");
}
log.info("Created a new empty entry");
}
@Logger
private Log log;
@Begin(pageflow="new-entry", join=true)
public void startPost(){
log.info("Starting to create a new post");
}
@End
public String post(){
log.info("Saving entry #{newEntry}");
entry.setPostDate(new Date());
category.getEntries().add(entry);
em.persist(entry);
return "/saveentry.xhtml";
}
/*
* Stateful seam components should have a destroy method to link
* the stateful bean lifecycle to the Seam component lifecycle.
*/
@Remove @Destroy
public void destroy(){}
}
pages.xml
<pages>
<!--
<page view-id="/newentry.jsf" action="#{conversation.begin}"/>
-->
<page view-id="/newentry.jsf" action="#{postAction.startPost}"/>
</pages>
I am so sorry if this was discussed in the past but I am desperate at the moment after spending two full days without being able to find a solution.