Hi Sergey,

>I have got a problem with updating model when clay based component is used.
>As a test case I have two pages. On the first page I ask for  name. Then, on 
>the 
>second page, I print it.
>
>When I have on the first page:
>   <h:form>
>    <h:inputText value="#{myuser.firstName}"/>
>    <h:commandButton value="Show It" action="outp"/>
>    </h:form>
>
>Everything works properly. However, when I replace inputText with clay style:
>
>   <h:form>
>    <sh:clay jsfid="inputName" id="comp"/>
>    <h:commandButton value="Show It" action="outp"/>
>    </h:form>
>
>It shows the init value from the bean, but does not update the bean when the 
>changed value is submitted.
>
>clay-config.xml has:
>
> <component jsfid="inputName" extends="inputText" allowBody="false">
>    <attributes>
>        <set name="value" value="#{myuser.firstName}"/>
>    </attributes>
> </component>
>
>faces-config.xml has:
>
>...
> <managed-bean>
>  <managed-bean-name>myuser</managed-bean-name>
>  <managed-bean-class>demo.User</managed-bean-class>
>  <managed-bean-scope>request</managed-bean-scope>
>  <managed-property>
>   <property-name>firstName</property-name>
>   <property-class>java.lang.String</property-class>
>   <value>John</value>
>  </managed-property>
> </managed-bean>
>...
>Actually, I incorporated those test stuff inside the shale-use-case 
>application 
>(07/08/05 nightly build). So, the rest configuration is from the original 
>shale-use-case environment.

You should look in the use case builds after 7/10.  Craig applied a patch to 
the rolodex example late Sat. having HTML tapestry like templating.  

Presently, the HTML templating has to be included as a subtree within a JSP 
page.  I'm near to posting a bugzilla ticket with a clay view handler that will 
allow for full html view templating :-)

>
>Do I miss something important here?

Try adding the "userValueLateBinding" attribute to the "set" node.
 
This attribute,  tells clay to pass a ValueBinding object to the target 
component. Otherwise, the resulting literal expression will be passed.  I'm 
guess that your navigation rule is not a redirect since your bean is in request 
scope.

For some of the base components like the outputText, this attribute is set as a 
default. This means that all components that extend "outputText" will inherit 
the default attribute with the name of "value" having "userValueLateBinding" 
set to "true". 

The default clay configuration file, view-config.xml, can be found in META-INF 
of the shale-clay.jar.

There is a similar attribute, "useMethodLateBinding" for method binding. The 
basis for these attributes is that there is a predefined contract between a 
component's JSP tag and the corresponding faces component. Since Clay is a 
stand-in for the JSP faces tags, these attributes allow you to specify what get 
passed to the component's properties - as an expression object or a literal 
value.

<component jsfid="inputName" extends="inputText" allowBody="false">
  <attributes>
   <set name="value" useValueLateBinding="true"
              value="#{myuser.firstName}"/>
  </attributes>
</component>

Gary
>
>--
>Sergey

Reply via email to