Uploaded image for project: 'RichFaces'
  1. RichFaces
  2. RF-12647

rich:dataTable rowclick with nested f:param

    Details

    • Type: Bug
    • Status: Closed (View Workflow)
    • Priority: Major
    • Resolution: Won't Fix
    • Affects Version/s: 4.3.0.M2
    • Fix Version/s: None
    • Component/s: component-tables
    • Labels:
      None
    • Environment:

      Win7, JDK7, Glassfish3, Mojarra 2.1.14, SeamFaces, RF 4.x.x

      Description

      During my migration from RF 3.3 I found this:

      Before (with RF 3.3.3):

      "RF 3 Sample"
      <rich:dataTable id="shippingList" value="#{billingLister.allShippings}" var="shipping">
        <a4j:support event="onRowClick" reRender="shippingEditForm">
          <a4j:actionparam name="shippingId" value="#{shipping.id}" assignTo="#{shippingEdit.id}"/>
        </a4j:support>
      
        <rich:column>
      	    <f:facet name="header">
      	            <h:outputText value="Destination"/>
      	    </f:facet>
      	    <h:outputText value="#{shipping.destinationCountry.name}" />
        </rich:column>
      
        <!-- other columns here -->
      </rich:dataTable>
      

      There was nothing really impacting on the migration guide
      https://community.jboss.org/wiki/RichFacesMigrationGuide33x-4xMigration-ComponentsMigration-RichIterationComponents
      So I logically did that with RF4.x.x:

      "RF 4 Sample 1"
      <rich:dataTable id="shippingList" value="#{billingLister.allShippings}" var="shipping">
        <a4j:ajax event="rowclick" render="shippingEditForm">
          <a4j:param name="shippingId" value="#{shipping.id}" assignTo="#{shippingEdit.id}"/>
        </a4j:ajax>
      
        <rich:column>
          <f:facet name="header">
            <h:outputText value="Destination"/>
          </f:facet>
          <h:outputText value="#{shipping.destinationCountry.name}" />
        </rich:column>
      
        <!-- other columns here -->
      </rich:dataTable>
      

      But the a4j:ajax isn't triggered (not at all, it's NOT a param assignment issue). To start having something that responds, one needs to remove the a4j:param and do it EL-newlook style.

      "RF 4 Sample 2"
      <a4j:ajax event="rowclick" render="shippingEditForm" listener="#{shippingEdit.setId(shipping.id)}"/>
      

      Anyhow we're close to RF-11446 and whenever that one gets fixed, one should check whether this case here is also solved.

      But wait, even that doesn't work: when one clicks on a row with that code, the listener is called but an ArrayIndexOutOfBoundsException is thrown because the clientID that's actually passed into UIDataAdapter#invokeOnRow is the id of the dataTable itself, NOT this of the row/cell. Hence, String rowId = clientId.substring(baseId.length() + 1) ends up tragically.

      So...to make it really work, you have to do what's described here: https://community.jboss.org/thread/174063 and not fall into the trap of RF-11446.

      Working code (RF 4.2.3+)

      "RF 4 Sample 3"
      <a4j:jsFunction name="shippingListRowClick" render="shippingEditForm">
        <a4j:param name="shippingId" assignTo="#{shippingEdit.id}"/>
      </a4j:jsFunction>
      
      <rich:dataTable id="shippingList" value="#{billingLister.allShippings}" var="shipping" onrowclick="shippingListRowClick(#{shipping.id});">
        <rich:column>
          <f:facet name="header">
            <h:outputText value="Destination"/>
          </f:facet>
          <h:outputText value="#{shipping.destinationCountry.name}" />
        </rich:column>
      
        <!-- other columns here -->
      </rich:dataTable>
      

      All that...for that.

      Overall that makes quite a difference between RF 3.3 and RF 4.x. I'd say we have a couple of regressions. Or at least that needs an extra clarification in the documentation and migration guide. Thank you.

        Gliffy Diagrams

          Attachments

            Issue Links

              Activity

                People

                • Assignee:
                  Unassigned
                  Reporter:
                  fabmars Fab Mars
                • Votes:
                  0 Vote for this issue
                  Watchers:
                  2 Start watching this issue

                  Dates

                  • Created:
                    Updated:
                    Resolved: