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

Reply via email to