This discussion is archived
0 Replies Latest reply: Jan 20, 2013 6:44 AM by Yannick Ongena RSS

Building LOV with composite components in JSF2

Yannick Ongena Employee ACE
Currently Being Moderated
I am trying to build a reusable list of value with composite components in JSF2.

I'm struggling with it as I'm not able to see how I can use the value attribute to return my value. The value is not a string, it's an object which is not used in a component.

Here's my code so far...
composite:interface componentType="peopleFinder">
          <composite:attribute name="label" default="Member"/>
          <composite:attribute name="value"/>
     </composite:interface>
     <composite:implementation>
          <p:inputText id="txtMember" binding="#{cc.txtMember}" disabled="true" /><p:commandButton id="cmdSearch" oncomplete="dlgPeople.show();" icon="ui-icon-search"/>
          <p:dialog header="People finder" widgetVar="dlgPeople" id="dlgPeople" width="800">
               <p:panel header="Search">
                    <h:panelGrid columns="3">
                         <h:outputLabel value="Name"/>
                         <p:inputText value="#{peopleFinder.name}" id="txtName"/>
                         <p:commandButton icon="ui-icon-search" actionListener="#{peopleFinder.doSearch}" update="pMembers" value="Search"/>
                    </h:panelGrid>
               </p:panel>
               <p:panel header="Members" id="pMembers">
                    <p:dataGrid value="#{peopleFinder.result}" var="member" columns="4">
                         <p:panel header="#{member.firstname } #{member.lastname}">
                              <h:panelGrid columns="2">
                                   <p:graphicImage width="40" height="50"/>
                                   
                                   <h:panelGrid columns="2">
                                        <p:outputLabel value="Date of birth: " styleClass="label"/>
                                        <h:outputText value="#{member.dob}">
                                             <f:convertDateTime pattern="d MMMMMMMM y"/>
                                        </h:outputText>
                                        
                                        <p:outputLabel value="Join date: " styleClass="label"/>
                                        <h:outputText value="#{member.joinDate}">
                                             <f:convertDateTime pattern="d MMMMMMMM y"/>
                                        </h:outputText>
                                   </h:panelGrid>
                                   <f:facet name="footer"><p:commandButton value="Select" action="#{cc.selectMember(member)}" oncomplete="dlgPeople.hide()"/></f:facet>
                              </h:panelGrid>
                         </p:panel>
                    </p:dataGrid>
               </p:panel>
          </p:dialog>
     </composite:implementation>
So basically what I want is that the component can be used as following:
<dc:peopleFinder value="#{someBean.selectedMember}"/>
someBean.selectedMember is a property in a managed bean which need to be set when the user clicks the Select button in the component.
How can I do this?

Legend

  • Correct Answers - 10 points
  • Helpful Answers - 5 points