fr:datatable funnies

Posted by alex sharaz-3 on
URL: https://discuss.orbeon.com/fr-datatable-funnies-tp3258180.html

Hi,
I''ve been moving some of my xforms apps over to using datatables with  
sortable columns and am having problems with setting up a "delete"  
button in a data table row in that it looks as if I'm deleting the  
wrong item from the back end database.

In my app I'm managing  a number of network devices identified by  
their mac address
<netdev>
....
<radius_devices>
     <radius_client>
         <mac_address>dd-ee-ff-cc-aa-bb</mac_address>
         <registering_user_name>ccsas</registering_user_name>
         <date_added>2011-02-02T17:08:38.000</date_added>
     </radius_client>
     <radius_client>
         <mac_address>aa-bb-cc-dd-ee-ee</mac_address>
         <registering_user_name>ccsas</registering_user_name>
         <date_added>2011-02-02T17:20:07.000</date_added>
     </radius_client>
........
</radius_devices>
..
</netdev>

in my view.xsl I've got

....
<fr:datatable paginated="true" rowsPerPage="40" scrollable="both"  
width="100%" height="500px">
              <xhtml:thead>
                 <xhtml:tr>
                    <xhtml:th/>
                    <xhtml:th fr:sortable="true"  
fr:resizeable="true">MAC Address</xhtml:th>
                    <xhtml:th fr:sortable="true"  
fr:resizeable="true">When added</xhtml:th>
                    <xhtml:th fr:sortable="true"  
fr:resizeable="true">Registering User</xhtml:th>
                    <xhtml:th>Action</xhtml:th>
                 </xhtml:tr>
                 </xhtml:thead>
                 <xhtml:tbody>
             <xforms:repeat nodeset="instance('netdev-instance')/
radius_devices/radius_client" id="usersRepeat">
                 <xhtml:tr>
                     <xhtml:td>
                         <xforms:output value="position() + ($fr-dt-
page - 1)*40"/>
                     </xhtml:td>
                     <xhtml:td>
                         <xforms:output ref="mac_address"/>
                     </xhtml:td>
                     <xhtml:td>
                         <xforms:output ref="date_added"/>
                     </xhtml:td>
                     <xhtml:td>
                         <xhtml:center>
                         <xforms:output ref="registering_user_name"/>
                         </xhtml:center>
                     </xhtml:td>
                     <xhtml:td>
                         <xforms:trigger>
                             <xforms:label>Remove</xforms:label>
                             <xforms:action ev:event="DOMActivate">
                                 <xforms:setvalue  
ref="instance('status')/message" value="instance('netdev-instance')/
radius_devices/radius_client[position() + ($fr-dt-page - 1)*40]/
mac_address"/>
                                 <!-- <xforms:setvalue  
ref="instance('delete-instance')/mac_address" value="mac_address"/> -->
                                 <xforms:setvalue  
ref="instance('delete-instance')/mac_address" value="instance('netdev-
instance')/radius_devices/radius_client[position() + ($fr-dt-page  
-1)*40]/mac_address"/>
                                 <xforms:send submission="delete-
submission"/>
                             </xforms:action>
                         </xforms:trigger>
                     </xhtml:td>
                 </xhtml:tr>
             </xforms:repeat>
                 </xhtml:tbody>
         </fr:datatable>

When i view the page, I get a line/item count in the 1st column and  
the last column has a Remove button that should delete the entry from  
the back end database specified by the mac address. The "position() +  
($fr-dt-page - 1)*40 " ( assuming 40 rows per page) statement should  
let me copy the correct mac address into the delete-instance so I can  
go and delete it.


It certainly works when I've got less than 1 page of data, but what  
happens if I've got more than one page and I change the sort order of  
the table based upon one of the columns? I've got another app with  
more than 1 page full of data that I rolled the above format out into  
and I'm fairly sure that sorting the datatable contents and then  
clicking on a delete icon deleted a different item to the one I  
selected.

Have I got the position() + ($fr-dt-page - 1)*40 portion right?

Rgds
Alex









--
You receive this message as a subscriber of the [hidden email] mailing list.
To unsubscribe: mailto:[hidden email]
For general help: mailto:[hidden email]?subject=help
OW2 mailing lists service home page: http://www.ow2.org/wws