[jboss-user] [JBoss Seam] - exception when using ScopeType.CONVERSATION and h:panelGrid
charles.crouch@jboss.com
do-not-reply at jboss.com
Tue Jan 16 15:33:08 EST 2007
I've got the following dummy app based on the numberGuess example (Seam 1.1GA, JSF 1.2RI, Facelets):
.xhtml
...
| <h:panelGrid binding="#{numberGuess.dynamicPanelGrid}" />
|
| Your guess:
| <h:inputText value="#{numberGuess.currentGuess}" id="guess" required="true"/>
|
| <h:commandButton value="Guess" action="#{numberGuess.testAction}"/>
| ...
.java
@Name("numberGuess")
| public class NumberGuess {
| ...
| private Integer currentGuess;
| private HtmlPanelGrid grid;
|
| @Create
| public void begin()
| {
| log.info("Entering begin()");
| }
|
| public void setCurrentGuess(Integer guess)
| {
| this.currentGuess = guess;
| }
|
| public Integer getCurrentGuess()
| {
| return currentGuess;
| }
|
| public String testAction() {
| currentGuess = currentGuess + 1;
| return null;
| }
|
|
|
| public HtmlPanelGrid getDynamicPanelGrid() {
| if (grid == null) {
| Application app = FacesContext.getCurrentInstance().getApplication();
| grid = (HtmlPanelGrid) app.createComponent(HtmlPanelGrid.COMPONENT_TYPE);
|
| HtmlOutputText text = (HtmlOutputText) app.createComponent(HtmlOutputText.COMPONENT_TYPE);
| text.setValue("Hello World");
| grid.getChildren().add(text);
| }
|
| return grid;
| }
|
| public void setDynamicPanelGrid(HtmlPanelGrid aGrid){
| grid = aGrid;
| }
| ...
|
So far so good, everything works great when I render the page the first time: I get the Hello World message and an empty textbox. Entering a number in the box and hitting Guess refreshes the page with Hello World and number+1 displayed, exactly as expected.
Now I want to make the scope of this numberGuess bean to be Conversational so I don't get a new instance each time. So I add @Scope
| @Name("numberGuess")
| @Scope(ScopeType.CONVERSATION)
| public class NumberGuess {
|
and
@Begin
@Create
| @Begin
| public void begin()
| {
|
Now when I render the page the first time again, everything is great as before. Enter a number and hit Guess, before it gets to any of my breakpoints on the java side, it goes bang...
| HTTP Status 500 -
|
| --------------------------------------------------------------------------------
|
| type Exception report
|
| message
|
| description The server encountered an internal error () that prevented it from fulfilling this request.
|
| exception
|
| javax.servlet.ServletException: /numberGuess.xhtml @18,66 binding="#{numberGuess.dynamicPanelGrid}": Target Unreachable, identifier 'numberGuess' resolved to null
| org.jboss.seam.servlet.SeamExceptionFilter.doFilter(SeamExceptionFilter.java:61)
| org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
|
|
| root cause
|
| javax.servlet.ServletException: /numberGuess.xhtml @18,66 binding="#{numberGuess.dynamicPanelGrid}": Target Unreachable, identifier 'numberGuess' resolved to null
| javax.faces.webapp.FacesServlet.service(FacesServlet.java:256)
| org.jboss.seam.servlet.SeamRedirectFilter.doFilter(SeamRedirectFilter.java:32)
| org.jboss.seam.servlet.SeamExceptionFilter.doFilter(SeamExceptionFilter.java:46)
| org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
|
|
| root cause
|
| javax.el.PropertyNotFoundException: /numberGuess.xhtml @18,66 binding="#{numberGuess.dynamicPanelGrid}": Target Unreachable, identifier 'numberGuess' resolved to null
| com.sun.facelets.el.TagValueExpression.setValue(TagValueExpression.java:95)
| com.sun.faces.lifecycle.RestoreViewPhase.doPerComponentActions(RestoreViewPhase.java:258)
| com.sun.faces.lifecycle.RestoreViewPhase.doPerComponentActions(RestoreViewPhase.java:263)
| com.sun.faces.lifecycle.RestoreViewPhase.doPerComponentActions(RestoreViewPhase.java:263)
| com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:225)
| com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:244)
| com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:113)
| javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)
| org.jboss.seam.servlet.SeamRedirectFilter.doFilter(SeamRedirectFilter.java:32)
| org.jboss.seam.servlet.SeamExceptionFilter.doFilter(SeamExceptionFilter.java:46)
| org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
|
|
Take out the...
| <h:panelGrid binding="#{numberGuess.dynamicPanelGrid}" />
from the .xhtml and everything works great. The numbers update as before and begin() only gets called once, as expected.
So.... what am I doing which causes a panelGrid bound to a bean property to blow up when using ScopeType.CONVERSATION ?
Thanks
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4002426#4002426
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4002426
More information about the jboss-user
mailing list