1 Reply Latest reply on Apr 30, 2007 2:54 AM by Aleksei Sosnovski

    A4j and deleting rows from data table

    Aleksei Sosnovski Newbie

      Hello,

      I need to dynamically add and delete rows to/from data table (tomahawk's one). Adding rows works OK. But deleting a row works only first time. Below is part of page and controller code responsible for displaying table and deleting rows. Scenario is following:
      1) adding several rows to table (no code here)
      2) deleting one row. Everything is OK, row deleted
      3) deleting second row. Method HtmlDataTable.getRowIndex() returns -1.

      Curently I am using Ajax4JSF 1.1.0 and JSF Sun RI 1.1_02-b08. Same thing with MyFaces 1.1.4 and 1.1.5. But with JSF 1.1_01 everything works OK (except that Ajax4JSF works only starting from third request). App. server is Web Sphere 6.1

      Thank you in advance for help.

      Part of JSP code:

      <t:dataTable
       id="propertiesTable"
       value="#{pc_ObjectDynamicInfoTile.properties}"
       var="prop"
       rows="30"
       headerClass="table_header"
       columnClasses="standard"
       style="width:100%"
       renderedIfEmpty="false">
      
       <t:column style="text-align:center">
       <f:facet name="header">
       <h:outputText value="Property type" />
       </f:facet>
      
       <h:outputText value="#{prop.propType}"/>
       </t:column>
      
       <t:column style="text-align:center">
       <f:facet name="header">
       <h:outputText value="Property value" />
       </f:facet>
      
       <h:outputText
       value="#{prop.value}"
       rendered="#{prop.type == 'date'}">
       <f:convertDateTime pattern="dd.MM.yyyy"/>
       </h:outputText>
      
       <h:outputText
       value="#{prop.value}"
       rendered="#{prop.type == 'text'}"/>
       </t:column>
      
       <t:column style="width: 18px; text-align: center;" id="column">
       <a4j:commandButton
       image="/theme/pictures/delete_1.gif"
       actionListener="#{pc_ObjectDynamicInfoTile.deleteProperty}"
       immediate="true"
       reRender="propTable"/>
       </t:column>
      </t:dataTable>
      


      Part of controller code:
       public void deleteProperty(ActionEvent evt) {
       int idx = getPropertiesTable().getRowIndex();
       properties.remove(idx);
       }