[jboss-user] [JBoss Seam] - Target Unreachable, identifier 'expre' resolved to null

Jeilong do-not-reply at jboss.com
Mon Aug 6 10:52:52 EDT 2007


I'm tearing my hair out over this simple thing I'd like to do: a conversation spanning two pages. Basically I have a table in which the user can click "edit" on a certain row. This will redirect the user to an edit page and the edit page gets populated with the selected item. So far so good. Upon clicking either save or cancel in the edit page the exception below comes up. It seems that the "supplierX" entity is nulled upon clicking either save or cancel. Am I missing some obvious logic or is this a configuration issue? We deployed this on JBoss 4.2.0.GA.

The stack trace:
anonymous wrote : 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.debug.hot.HotDeployFilter.doFilter(HotDeployFilter.java:63)
  | org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
  | org.jboss.seam.web.MultipartFilter.doFilter(MultipartFilter.java:87)
  | org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
  | org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:63)
  | org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
  | org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:46)
  | org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
  | org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:140)
  | org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
  | org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
  | org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:46)
  | 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.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
  | org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
  | org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
  | org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:156)
  | org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
  | org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:241)
  | org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
  | org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:580)
  | org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
  | java.lang.Thread.run(Thread.java:595)
  | 
  | Caused by javax.el.PropertyNotFoundException with message: "/stemtables/supplier/edit_supplier.xhtml @30,59 value="#{suppplierX.phone}": Target Unreachable, identifier 'suppplierX' resolved to null"
  | 
  | com.sun.facelets.el.TagValueExpression.getType(TagValueExpression.java:62)
  | com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getConvertedValue(HtmlBasicInputRenderer.java:81)
  | javax.faces.component.UIInput.getConvertedValue(UIInput.java:934)
  | javax.faces.component.UIInput.validate(UIInput.java:860)
  | javax.faces.component.UIInput.executeValidate(UIInput.java:1065)
  | javax.faces.component.UIInput.processValidators(UIInput.java:666)
  | javax.faces.component.UIForm.processValidators(UIForm.java:229)
  | javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1030)
  | javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:662)
  | com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:100)
  | com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
  | com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)
  | javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)
  | 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.debug.hot.HotDeployFilter.doFilter(HotDeployFilter.java:63)
  | org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
  | org.jboss.seam.web.MultipartFilter.doFilter(MultipartFilter.java:87)
  | org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
  | org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:63)
  | org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
  | org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:46)
  | org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
  | org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:140)
  | org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
  | org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
  | org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:46)
  | 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.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
  | org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
  | org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
  | org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:156)
  | org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
  | org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:241)
  | org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
  | org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:580)
  | org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
  | java.lang.Thread.run(Thread.java:595)

The SFSB:
@Stateful
  | @Name("supplierMaintenance")
  | @Scope(ScopeType.CONVERSATION)
  | public class SupplierMaintenanceAction implements SupplierMaintenance {
  | 
  | 	@PersistenceContext(type = PersistenceContextType.EXTENDED)
  | 	private EntityManager entityManager;
  | 	
  | 	@EJB
  | 	private SupplierFacadeLocal supplierFacade;
  | 	
  | 	@DataModel
  | 	private List<Supplier> suppliers;
  | 	
  | 	@DataModelSelection
  | 	@Out(value = "supplierX", required = false) // works
  | 	@In(value = "supplierX", required = false) // doesn't work! why?
  | 	private Supplier selectedSupplier;
  | 	
  | 	@Logger
  | 	private Log log;
  | 
  | 	@Begin
  | 	@Factory("suppliers")
  | 	public void findSuppliers() {
  | 		log.debug("Entering findSuppliers.");
  | 		try {
  | 			suppliers = supplierFacade.findAllSuppliers();
  | 		} catch (Exception e) {
  | 			log.error("Failed to find suppliers.", e);
  | 		}
  | 		log.debug("Leaving findSupplier.");
  | 	}
  | 	
  | 	public String edit() {
  | 		return null;
  | 	}
  | 	
  | 	@End
  | 	public String delete() {
  | 		Supplier toDelete = entityManager.merge(selectedSupplier);
  | 		entityManager.remove(toDelete);
  | 		findSuppliers();
  | 		return null;
  | 	}
  | 	
  | 	@End
  | 	public String save() {
  | 		Supplier toStore = entityManager.merge(selectedSupplier);
  | 		entityManager.persist(toStore);
  | 		findSuppliers();
  | 		return null;
  | 	}
  | 	
  | 	@End
  | 	public String cancel() {
  | 		return null;
  | 	}
  | 	
  | 	@Remove // remove method is mandated by EJB3 specification for stateful session beans
  | 	public void remove() {} 
  | 
  | 	@Destroy // destroy method is mandated by EJB3 specification for stateful session beans
  | 	public void destroy() {}
  | }

pages.xml
<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"
  | 	no-conversation-view-id="/login.xhtml" login-view-id="/login.xhtml">
  | 	
  |     <page view-id="*">
  |         <navigation from-action="#{identity.logout}">
  |             <redirect view-id="/login.xhtml" />
  |         </navigation>
  |     </page>
  |     
  |     <page view-id="/login.xhtml">
  |         <navigation>
  |             <rule if="#{identity.loggedIn}">
  |                 <redirect view-id="/welcome.xhtml" />
  |             </rule>
  |         </navigation>
  |     </page>
  |     
  |     <page view-id="/welcome.xhtml" login-required="true"></page>
  |     
  |     <!-- SUPPLIER MAINTAINCE -->
  |     <page view-id="/stemtables/supplier/supplier.xhtml" login-required="true">
  |     	<navigation from-action="#{supplierMaintenance.delete}">
  |     		<redirect view-id="/stemtables/supplier/supplier.xhtml" />
  |     	</navigation>
  |     </page>
  |     
  |     <page view-id="/stemtables/supplier/supplier.xhtml" login-required="true">
  |     	<navigation from-action="#{supplierMaintenance.edit}">
  |     		<redirect view-id="/stemtables/supplier/edit_supplier.xhtml" />
  |     	</navigation>
  |     </page>
  |     
  |     <page view-id="/stemtables/supplier/edit_supplier.xhtml" login-required="true">
  |     	<navigation from-action="#{supplierMaintenance.save}">
  |     		<redirect view-id="/stemtables/supplier/supplier.xhtml" />
  |     	</navigation>
  |     </page>
  | 
  |     <page view-id="/stemtables/supplier/edit_supplier.xhtml" login-required="true">
  |     	<navigation from-action="#{supplierMaintenance.cancel}">
  |     		<redirect view-id="/stemtables/supplier/supplier.xhtml" />
  |     	</navigation>
  |     </page>
  | 
  |     <!-- EXCEPTION HANDLING -->
  |     <exception class="org.jboss.seam.security.NotLoggedInException">
  |         <redirect view-id="/login.xhtml">
  |             <message severity="warn">You must be logged in to use this feature.</message>
  |         </redirect>
  |     </exception>
  | </pages>

web.xml
<web-app version="2.5"
  | 	metadata-complete="true" 
  | 	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-app_2_5.xsd">
  | 
  | 	<!--  Seam configuration -->
  | 	<listener>
  | <listener-class>org.jboss.seam.servlet.SeamListener</listener-class>
  | 	</listener>
  | 
  | 	<!-- Propagate conversations across redirects -->
  | 	<filter>
  | 		<filter-name>Seam Redirect Filter</filter-name>
  | 		<filter-class>org.jboss.seam.servlet.SeamRedirectFilter</filter-class>
  | 	</filter>
  | 
  | 	<filter-mapping>
  | 		<filter-name>Seam Redirect Filter</filter-name>
  | 		<url-pattern>*.seam</url-pattern>
  | 	</filter-mapping>
  | 
  | 	<servlet>
  |         <servlet-name>Seam Resource Servlet</servlet-name>
  |         <servlet-class>org.jboss.seam.servlet.ResourceServlet</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.web.SeamFilter</filter-class>
  |     </filter>
  | 
  |     <filter-mapping>
  |         <filter-name>Seam Filter</filter-name>
  |         <url-pattern>/*</url-pattern>
  |     </filter-mapping>
  | 
  | 	<!-- JSF -->
  | 	<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.DEVELOPMENT</param-name>
  | 		<param-value>true</param-value>
  | 	</context-param>
  | 
  | 	<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>
  | 
  | 	<!-- JSF RI -->
  | 	<listener>
  |         <listener-class>com.sun.faces.config.ConfigureListener</listener-class>
  |     </listener> 
  | 
  |     <session-config>
  |         <session-timeout>10</session-timeout> 
  |     </session-config>    
  | </web-app>

/stemtables/supplier/supplier.xhtml
<ui:composition 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"
  | 	  			xmlns:a="https://ajax4jsf.dev.java.net/ajax"
  | 				template="../../template.xhtml">
  | 
  | 	<!-- content -->
  | 	<ui:define name="content">
  | 		<div class="section">
  | 			<h:form>
  | 		
  | 			    <h:dataTable value="#{suppliers}" var="supplier">
  | 			    	<h:column>#{supplier.supplierName}</h:column>
  | 			    	<h:column>#{supplier.address}</h:column>
  | 			    	<h:column>#{supplier.phone}</h:column>
  | 			    	<h:column>#{supplier.URL}</h:column>
  | 			    	<h:column>
  | 			    		<h:commandButton value="Edit" action="#{supplierMaintenance.edit}" />
  | 			    	</h:column>
  | 			    	<h:column>
  | 			    		<h:commandButton value="Delete" action="#{supplierMaintenance.delete}" />
  | 			    	</h:column>
  | 			    </h:dataTable>
  | 			    
  | 			    <span class="errors">
  | 			       <h:messages globalOnly="true"/>
  | 			    </span>
  | 			    
  | 			</h:form>
  | 		</div>
  | 	</ui:define>
  | 	
  | 	<!-- sidebar -->
  | 	<ui:define name="sidebar">
  | 		<h1>SIDEBAR SECTION</h1>
  | 	</ui:define>
  | </ui:composition>

/stemtables/supplier/edit_supplier.xhtml
<ui:composition 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"
  | 				template="../../template.xhtml">
  | 
  | 	<!-- content -->
  | 	<ui:define name="content">
  | 		<div class="section">
  |             <h:form>
  | 				<fieldset>
  | 					<div>
  | 						<h:outputLabel for="supplierName">Name: </h:outputLabel>
  | 						<h:inputText id="username" value="#{supplierX.supplierName}" required="true">
  | 							<s:validate />
  | 						</h:inputText>
  | 						<div class="errors"><h:message for="supplierName" /></div>
  | 					</div>
  | 					<div>
  | 						<h:outputLabel for="address">Address: </h:outputLabel>
  | 						<h:inputText id="address" value="#{supplierX.address}">
  | 							<s:validate />
  | 						</h:inputText>
  | 						<div class="errors"><h:message for="address" /></div>
  | 					</div>
  | 					<div>
  | 						<h:outputLabel for="phone">Phone: </h:outputLabel>
  | 						<h:inputText id="phone" value="#{suppplierX.phone}">
  | 							<s:validate />
  | 						</h:inputText>
  | 						<div class="errors"><h:message for="phone" /></div>
  | 					</div>
  | 					<div>
  | 						<h:outputLabel for="URL">URL: </h:outputLabel>
  | 						<h:inputText id="URL" value="#{supplierX.URL}">
  | 							<s:validate />
  | 						</h:inputText>
  | 						<div class="errors"><h:message for="URL" /></div>
  | 					</div>
  | 					<div class="errors"><h:messages globalOnly="true" /></div>
  | 					<div class="buttonBox">
  | 						<h:commandButton action="#{supplierMaintenance.save}" value="Save">
  | 							<s:conversationPropagation type="join" />
  | 						</h:commandButton>
  | 					</div>
  | 					<div class="buttonBox"><h:commandButton action="#{supplierMaintenance.cancel}" value="Cancel" /></div>
  | 				</fieldset>
  |             </h:form>
  | 
  | 		    <span class="errors">
  | 		       <h:messages globalOnly="true" />
  | 		    </span>
  | 		</div>
  | 	</ui:define>
  | 	
  | 	<!-- sidebar -->
  | 	<ui:define name="sidebar">
  | 		<h1>SIDEBAR SECTION</h1>
  | 	</ui:define>
  | </ui:composition>

EAR structure:
anonymous wrote : 
  | EAR:
  | + jboss-seam-2.0.0.beta1.jar
  | + jboss-el-seam-2.0.0.beta1.jar
  | + ejb.jar
  | + web.war
  | 
  | web.war:
  | WEB-INF/components.xml
  | WEB-INF/faces-config.xml
  | WEB-INF/pages.xml
  | WEB-INF/web.xml
  | WEB-INF/libjboss-seam-ui-2.0.0.beta1.jar
  | WEB-INF/lib/jboss-seam-debug-2.0.0.beta1.jar
  | WEB-INF/lib/jsf-facelets-1.1.13.jar
  | 

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4071220#4071220

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4071220



More information about the jboss-user mailing list