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 _______________________________________________ jboss-user mailing list jboss-user@lists.jboss.org https://lists.jboss.org/mailman/listinfo/jboss-user