[jboss-user] [JBoss Seam] - model validation failed

davidclf do-not-reply at jboss.com
Tue Sep 18 03:53:42 EDT 2007


I try to migrate Dan Allen's <<Seamless JSF>> example to seam 2.0,
the program startups success,but when I edit the course and click save button,the page return "model validation failed" message!
follows is error page:

  | "Course Name   
  | Type  Public Private Semi-Private Resort Military  
  | Website   
  | Phone   
  | Country  model validation failed:/courseEditor.jspx @70,116 value="#{course.address.country}": Target Unreachable, 'address' returned null on 'com.ibm.dw.open18.Course'  
  | State    model validation failed:/courseEditor.jspx @78,86 value="#{course.address.state}": Target Unreachable, 'address' returned null on 'com.ibm.dw.open18.Course'  
  | County  model validation failed:/courseEditor.jspx @88,114 value="#{course.address.county}": Target Unreachable, 'address' returned null on 'com.ibm.dw.open18.Course'  
  | City  model validation failed:/courseEditor.jspx @96,110 value="#{course.address.city}": Target Unreachable, 'address' returned null on 'com.ibm.dw.open18.Course'  
  | ZIP Code  model validation failed:/courseEditor.jspx @104,122 value="#{course.address.postalCode}": Target Unreachable, 'address' returned null on 'com.ibm.dw.open18.Course'' 
  | 
my web.xml:

  | <?xml version="1.0" encoding="UTF-8"?>
  | <web-app xmlns="http://java.sun.com/xml/ns/j2ee"
  | 	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  | 	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
  | 	version="2.4">
  | 
  | 	<display-name>Open 18 (Phase 1)</display-name>
  | 	<description>JBoss Seam Sample Application</description>
  | 
  | 	<context-param>
  | 		<description>
  | 			Comma separated list of URIs that serve as spring configuration files
  | 		</description>
  | 		<param-name>contextConfigLocation</param-name>
  | 		<param-value>
  | 			/WEB-INF/spring-beans.xml
  | 		</param-value>
  | 	</context-param>
  | 
  | 	<filter>
  | 		<filter-name>Seam Redirect Filter</filter-name>
  | 		<filter-class>org.jboss.seam.servlet.SeamFilter</filter-class>
  | 	</filter>
  | 
  | 	<filter-mapping>
  | 		<filter-name>Seam Redirect Filter</filter-name>
  | 		<url-pattern>*.action</url-pattern>
  | 	</filter-mapping>
  | 	
  | 	<listener>
  | 		<listener-class>org.jboss.seam.servlet.SeamListener</listener-class>
  | 	</listener>
  | 	
  | 	<listener>
  | 		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  | 	</listener>
  | 
  | 	<listener>
  | 		<listener-class>org.apache.myfaces.webapp.StartupServletContextListener</listener-class>
  | 	</listener>
  | 
  | 	<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>.jspx</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>*.action</url-pattern>
  | 	</servlet-mapping>
  | 	
  | 	<welcome-file-list>
  | 		<welcome-file>index.jsp</welcome-file>
  | 	</welcome-file-list>
  | 
  | </web-app>
  | 

my componets.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:persistence="http://jboss.com/products/seam/persistence"
  |             xmlns:transaction="http://jboss.com/products/seam/transaction"
  |             xmlns:spring="http://jboss.com/products/seam/spring"
  |             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/persistence http://jboss.com/products/seam/persistence-2.0.xsd
  |                                 http://jboss.com/products/seam/components http://jboss.com/products/seam/components-2.0.xsd">
  |  
  | 	<!-- NOTE: this file can be used to provide IoC injection of spring-defined beans, instead of using the @In annotation -->
  | 
  | 	<!-- enable the /debug.action page -->
  | 	<core:init debug="true" />
  | 
  | 	<!--
  | 	<core:pages no-conversation-view-id="/main.jspx" />
  | 	-->
  | 
  | 	<core:manager conversation-timeout="60000"
  | 		concurrent-request-timeout="500"
  | 		conversation-id-parameter="cid" />
  | 		
  | 
  | 	<!--
  | 	<core:ejb installed="false" />
  | 	<core:microcontainer installed="false" />
  | 	-->
  | 	
  | 	<!--<persistence:hibernate-session-factory name=""/>-->
  |     
  |   <persistence:managed-hibernate-session name="courseDatabase"
  |                                     session-factory="#{sessionFactory}"
  |                                     auto-create="true"/>
  |     
  |   <transaction:hibernate-transaction session="#{courseDatabase}"/>
  | 
  | 	<!-- Enabling the debug property will generate an AJAX console (but you could just use FireBug) -->
  | 	<component name="org.jboss.seam.remoting.remotingConfig">
  | 		<property name="debug">false</property>
  | 	</component>
  | 
  | </components>
  | 
my faces-config.xml:

  | <?xml version="1.0" encoding="UTF-8"?>
  | <!DOCTYPE faces-config 
  | PUBLIC "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.0//EN"
  |                             "http://java.sun.com/dtd/web-facesconfig_1_0.dtd">
  | <faces-config>
  | 
  | 	<application>
  | 		<view-handler>
  | 			com.sun.facelets.FaceletViewHandler
  | 		</view-handler>
  | 		<variable-resolver>
  | 			org.springframework.web.jsf.DelegatingVariableResolver
  | 		</variable-resolver>
  | 		<locale-config>
  | 			<default-locale>en_US</default-locale>
  | 		</locale-config>
  | 		<message-bundle>MessageBundle</message-bundle>
  | 	</application>
  | 
  | </faces-config>
  | 

the courseEditor.jspx:

  | <?xml version="1.0" encoding="UTF-8"?>
  | <jsp:root xmlns="http://www.w3.org/1999/xhtml"
  | 	xmlns:jsp="http://java.sun.com/JSP/Page"
  | 	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:s="http://jboss.com/products/seam/taglib"
  | 	xmlns:c="http://java.sun.com/jstl/core" version="2.0">
  | 	<ui:composition template="/templates/master.jspx">
  | 		<ui:define name="title">
  | 	<h:outputText value="#{course.id gt 0 ? 'Edit' : 'Create'} Course" />
  | 	</ui:define>
  | 	<ui:define name="body">
  | 	<h:form id="course">
  | 	<s:validateAll>
  | 	<f:facet name="aroundInvalidField">
  | 		<s:span styleClass="invalid"/>
  | 	</f:facet>
  | 	<f:facet name="afterInvalidField">
  | 		<s:span styleClass="message">#{spacer}<s:message showDetail="true" showSummary="false" /></s:span>
  | 	</f:facet>
  | 	<table class="detail">
  | 		<colgroup>
  | 			<col width="20%" />
  | 			<col width="80%" />
  | 		</colgroup>
  | 		<tr>
  | 			<th><h:outputLabel for="name" value="Course Name" /></th>
  | 			<td>
  | 				<s:decorate>
  | 					<h:inputText id="name" value="#{course.name}" size="40" styleClass="text"/>
  | 				</s:decorate>
  | 			</td>
  | 		</tr>
  | 		<tr>
  | 			<th><h:outputLabel for="type" value="Type" /></th>
  | 			<td>
  | 				<s:decorate>
  | 					<h:selectOneMenu id="type" value="#{course.type}">
  | 						<s:convertEnum />
  | 						<s:enumItem enumValue="PUBLIC" label="Public" />
  | 						<s:enumItem enumValue="PRIVATE" label="Private" />
  | 						<s:enumItem enumValue="SEMI_PRIVATE" label="Semi-Private" />
  | 						<s:enumItem enumValue="RESORT" label="Resort" />
  | 						<s:enumItem enumValue="MILITARY" label="Military" />
  | 					</h:selectOneMenu>
  | 				</s:decorate>
  | 			</td>
  | 		</tr>
  | 		<tr>
  | 			<th><h:outputLabel for="uri" value="Website" /></th>
  | 			<td>
  | 				<s:decorate>
  | 					<h:inputText id="uri" value="#{course.uri}" size="40" styleClass="text" />
  | 				</s:decorate>
  | 			</td>
  | 		</tr>
  | 		<tr>
  | 			<th><h:outputLabel for="phone" value="Phone" /></th>
  | 			<td>
  | 				<s:decorate>
  | 					<h:inputText id="phone" value="#{course.phoneNumber}" size="10" styleClass="text" />
  | 				</s:decorate>
  | 			</td>
  | 		</tr>
  | 		<tr>
  | 			<th><h:outputLabel for="country" value="Country" /></th>
  | 			<td>
  | 				<s:decorate>
  | 					<h:inputText id="country" value="#{course.address.country}" required="true" size="40" styleClass="text" />
  | 				</s:decorate>
  | 			</td>
  | 		</tr>
  | 		<tr>
  | 			<th><h:outputLabel for="state" value="State" /></th>
  | 			<td>
  | 				<s:decorate>
  | 					<h:selectOneMenu id="state" value="#{course.address.state}" required="true">
  | 						<s:selectItems var="state" value="#{states}" label="#{state}" noSelectionLabel="" />
  | 					</h:selectOneMenu>
  | 				</s:decorate>
  | 			</td>
  | 		</tr>
  | 		<tr>
  | 			<th><h:outputLabel for="county" value="County" /></th>
  | 			<td>
  | 				<s:decorate>
  | 					<h:inputText id="county" required="true" value="#{course.address.county}" size="40" styleClass="text" />
  | 				</s:decorate>
  | 			</td>
  | 		</tr>
  | 		<tr>
  | 			<th><h:outputLabel for="city" value="City" /></th>
  | 			<td>
  | 				<s:decorate>
  | 					<h:inputText id="city" required="true" value="#{course.address.city}" size="40" styleClass="text" />
  | 				</s:decorate>
  | 			</td>
  | 		</tr>
  | 		<tr>
  | 			<th><h:outputLabel for="postalCode" value="ZIP Code" /></th>
  | 			<td>
  | 				<s:decorate>
  | 					<h:inputText id="postalCode" required="true" value="#{course.address.postalCode}" size="40" styleClass="text" />
  | 				</s:decorate>
  | 			</td>
  | 		</tr>
  | 		<tr>
  | 			<th><h:outputLabel for="description" value="Description" /></th>
  | 			<td>
  | 				<s:decorate>
  | 					<h:inputTextarea id="description" value="#{course.description}" cols="38" rows="4"/>
  | 				</s:decorate>
  | 			</td>
  | 		</tr>
  | 	</table>
  | </s:validateAll>
  | <p class="commands">
  | 	<h:commandButton id="save" action="#{courseAction.saveCourse}" value="Save" styleClass="button" />
  | 	#{spacer}
  | 	<s:button id="cancel" action="#{courseAction.clearSelection}" value="Cancel" styleClass="button" />
  | </p>
  | 		</h:form>
  | 	</ui:define>
  | </ui:composition>
  | </jsp:root>
  | 

Any idea to solve it ? Is it a bug ?
Many thanks in advance!


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

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



More information about the jboss-user mailing list