[jsr-314-open] <h:dataTable> binding vs. ui:repeat

Andy Schwartz andy.schwartz at oracle.com
Mon Sep 7 21:06:58 EDT 2009


Thanks Lincoln.  I haven't had time to debug this, but I have a theory 
about what might be happening.  In your sample:

> <a:editText value="#{cc.attrs.task.text}" 
> rendered="#{!cc.attrs.disabled}">
> *<f:actionListener for="submit" 
> action="#{taskController.saveTaskAjax(cc.attrs.story, cc.attrs.task)}" 
> /> *
> </a:editText>

We expect "cc" to resolve to the containing composite component (ie. to 
the <socialpm:taskBlock> component).  I wouldn't be surprised if what is 
actually happening is that "cc" is  being resolved to the <a:editText> 
composite component instead.  One reason why I suspect this might be 
happening is that I know that Ryan has investigated/resolved similar 
problems not too long ago.  Another reason why I am suspicious about 
this is because we have faced similar issues in our own (ADF Faces) 
declarative component solution.  This stuff can get tricky. :-)

Hey Ryan -

Does this problem look familiar?  Any thoughts on this?

Andy

Lincoln Baxter, III wrote:
> Hey Andy, here you go:
>
> In the mean time I'm going to sign up for the dev lists.
>
> ----------------------------------------------------------------------
> Using:
> <f:actionListener for="submit" 
> action="*#{taskController.saveTaskAjax(cc.attrs.story, 
> cc.attrs.task)}*" />
>
>     *#{taskController.saveTaskAjax(cc.attrs.story, cc.attrs.task)}* =
>     null values passed to method
>     *#{taskController.saveTaskAjax(currentStoryBean.story, task)}* =
>     correct values resolved, assuming currentStoryBean.story and task
>     are both in the EL/page scope somewhere.
>
>
> ----------------------------------------------------------------------
> *CC Impl:*
>
>
> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
>         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
> <html xmlns="http://www.w3.org/1999/xhtml"
> xmlns:h="http://java.sun.com/jsf/html"
> xmlns:f="http://java.sun.com/jsf/core"
> xmlns:a="http://java.sun.com/jsf/composite/ajax"
> xmlns:cc="http://java.sun.com/jsf/composite">
> <cc:interface>
> <cc:attribute name="story" required="true" type="Object" />
> <cc:attribute name="task" required="true" type="Object" />
> <cc:attribute name="disabled" required="false" type="Boolean" 
> default="false" />
> <cc:insertChildren />
> </cc:interface>
>
> <cc:implementation>
> <h:outputStylesheet name="socialpm/socialpm.css" />
> <h:panelGroup id="taskBlock" layout="block" class="box-bordered p5 
> #{cc.attrs.styleClass} taskBlock_#{cc.attrs.task.status}" 
> style="#{cc.attrs.style}">
>
> <div class="m5l" style="margin-right: 25px;" >
> <h:outputText value="#{cc.attrs.task.text}" 
> rendered="#{cc.attrs.disabled}"/>
> <a:editText value="#{cc.attrs.task.text}" 
> rendered="#{!cc.attrs.disabled}">
> *<f:actionListener for="submit" 
> action="#{taskController.saveTaskAjax(cc.attrs.story, cc.attrs.task)}" 
> /> *
> </a:editText>
> </div>
> </cc:implementation>
> </html>
>
>
> ----------------------------------------------------------------------
> *consuming page code:* <-- this is where task is defined in the 
> UI:Repeat, so it is in scope
>
> <!DOCTYPE html
>       PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
>       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
> <html xmlns="http://www.w3.org/1999/xhtml"
> xmlns:c="http://java.sun.com/jsp/jstl/core"
> xmlns:f="http://java.sun.com/jsf/core"
> xmlns:h="http://java.sun.com/jsf/html"
> xmlns:socialpm="http://java.sun.com/jsf/composite/socialpm"
> xmlns:pretty="http://ocpsoft.com/prettyfaces"
> xmlns:ui="http://java.sun.com/jsf/facelets" xml:lang="en" lang="en">
>
> <ui:composition>
> <h:form id="tasksForm">
> <c:if test="#{empty currentStoryBean.story.tasks}">
> <div class="m5">This story has no tasks. That could be a problem 
> later...</div>
> </c:if>
>
> <ui:repeat value="#{currentStoryBean.story.tasks}" var="task">
> <socialpm:taskBlock task="#{task}" story="#{currentStoryBean.story}"
> members="#{currentProjectBean.project.activeMembers}"
> disabled="#{!authorizationBean.isMember or !currentStoryBean.story.open}"
> deletable="true" styleClass="m5t" refreshOnSave="false" />
> </ui:repeat>
> </h:form>
> </ui:composition>
> </html>
>
>
>
>
> On Sat, 2009-09-05 at 15:23 -0400, Andy Schwartz wrote:
>> Hey Lincoln -
>>
>> Lincoln Baxter, III wrote:
>> > First, please let me know if there is a better place to ask JSF Dev 
>> > related questions.
>> >
>>
>> I suppose the Mojarra dev list might be the right place for 
>> implementation questions:
>>
>> https://javaserverfaces.dev.java.net/mailinglists.html
>>
>> Though personally I am fine with you asking here. :-)
>>
>> Could you send along your composite component implementation (and 
>> perhaps a snippet from the consuming page)?  Just want to make sure I 
>> understand the use case.
>>
>> Andy
>>
>>
>>     
> --
> *Lincoln Baxter, III*
> Co-Founder of OcpSoft <http://ocpsoft.com>
> Author of PrettyFaces <http://ocpsoft.com/prettyfaces> URL Rewriting 
> for JSF
>
>





More information about the jsr-314-open-mirror mailing list