0 Replies Latest reply: Apr 27, 2011 4:31 PM by Ben Software Engineer RSS

    Dynamic EL expression for data binding

    Ben Software Engineer Newbie


         I am working on a very dynamic UI and am stuck on a problem using EL in a facelets view.

      JBoss 5.0.x

      RichFaces 3.2.x

      JSF 1.2

      Facelets 1.1.x

      Java 1.6


      In the below code I'm trying to bind a variable but the expression path to the bean/variable is dynamic:


      myList is a ListDataModel that is passed in as a variable.  For example it may be from



      myColumns is a list of meta data Objecst that is also passed in, has information about the column and binding.  For example

      column1.headerTxt = "Customer Name"

      column1.relativePathToProperty = "name"


      el:setValueBinding is a custom tag that sets a value binding


      This code works for this scenario:

      <rich:dataTable var="listItem" value="#{myList}">

                  <c:forEach var="column" items="#{myColumns}">

                       <el:setValueBinding var="property"

                           valueBinding="${column.relativePathToProperty}" />


                          <f:facet name="header">

                              <h:outputText value="#{column.headerTxt}" />


                          <h:inputText value="#{listItem[property]}"  />





      However if the meta data is

      column2.headerTxt = "Zip Code"

      column2.relativePathToProperty = "address.zipCode"


      This does not work.  Basically it only supports one level deep of property mappings by using "listItem[property]" but that method breaks down if the item being iterated over in the table has depth that you want to bind to.  What I need is some mechanism to combine

      listItem + "address.zipCode" so that an EL expression would call "customer.getAddress().getZipCode()".


      The challenge seems to be that I cannot access listItem until within the defferred context ("# annotation") but cannot dynamically resolve properties unless using the immediate context "($ annotation)", and I'm at a loss for the approach to accomplish this.  Any ideas are greatly appreciated...?