[ 
https://issues.jboss.org/browse/RF-12647?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Fab Mars updated RF-12647:
--------------------------

    Description: 
During my migration from RF 3.3 I found this:

Before (with RF 3.3.3):
{code:xml}
<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>
{code}

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:

{code:xml}
<rich:dataTable id="shippingList" value="#{billingLister.allShippings}" 
var="shipping">
  <a4j:ajax event="rowclick" render="shippingEditForm">
    <a4j:actionparam 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>
{code}

But the a4j:aja isn't triggered. To start having something that works, one 
needs to remove the a4j:param and do it straight.

{code:xml}
<a4j:ajax event="rowclick" render="shippingEditForm" 
listener="#{shippingEdit.setId(shipping.id)}"/>
{code}

Not sure this is a regression or not, but wait, here's more: when one clicks on 
a row with that code, he gets an ArrayIndexOutOfBoundsException 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 
https://issues.jboss.org/browse/RF-11446. Great really...

Overall that makes quite a difference between RF 3.3 and RF 4.x. I'd say it's a 
regression. Or at least that needs an extra clarification in the documentation 
and migration guide. Thank you.

  was:
During my migration from RF 3.3 I found this:

Before (with RF 3.3.3):
{code:xml}
<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>
{code}

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:

{code:xml}
<rich:dataTable id="shippingList" value="#{billingLister.allShippings}" 
var="shipping">
  <a4j:ajax event="rowclick" render="shippingEditForm">
    <a4j:actionparam 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>
{code}

But the a4j:aja isn't triggered. To start having something that works, one 
needs to remove the a4j:param and do it straight.

{code:xml}
<a4j:ajax event="rowclick" render="shippingEditForm" 
listener="#{shippingEdit.setId(shipping.id)}"/>
{code}

Not sure this is a regression or not, but wait, here's more: when one clicks on 
a row with that code, he gets an ArrayIndexOutOfBoundsException 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 caveat of 
https://issues.jboss.org/browse/RF-11446. Great really...

Overall that makes quite a difference between RF 3.3 and RF 4.x. I'd say it's a 
regression. Or at least that needs an extra clarification in the documentation 
and migration guide. Thank you.


    
> rich:dataTable rowclick regression
> ----------------------------------
>
>                 Key: RF-12647
>                 URL: https://issues.jboss.org/browse/RF-12647
>             Project: RichFaces
>          Issue Type: Bug
>      Security Level: Public(Everyone can see) 
>          Components: component-tables
>    Affects Versions: 4.3.0.M2
>         Environment: Win7, JDK7, Glassfish3, Mojarra 2.1.14, SeamFaces, RF 
> 4.x.x
>            Reporter: Fab Mars
>
> During my migration from RF 3.3 I found this:
> Before (with RF 3.3.3):
> {code:xml}
> <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>
> {code}
> 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:
> {code:xml}
> <rich:dataTable id="shippingList" value="#{billingLister.allShippings}" 
> var="shipping">
>   <a4j:ajax event="rowclick" render="shippingEditForm">
>     <a4j:actionparam 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>
> {code}
> But the a4j:aja isn't triggered. To start having something that works, one 
> needs to remove the a4j:param and do it straight.
> {code:xml}
> <a4j:ajax event="rowclick" render="shippingEditForm" 
> listener="#{shippingEdit.setId(shipping.id)}"/>
> {code}
> Not sure this is a regression or not, but wait, here's more: when one clicks 
> on a row with that code, he gets an ArrayIndexOutOfBoundsException 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 
> https://issues.jboss.org/browse/RF-11446. Great really...
> Overall that makes quite a difference between RF 3.3 and RF 4.x. I'd say it's 
> a regression. Or at least that needs an extra clarification in the 
> documentation and migration guide. Thank you.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira
_______________________________________________
richfaces-issues mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/richfaces-issues

Reply via email to