2 Replies Latest reply on May 30, 2008 6:06 AM by jonckvanderkogel

    wrong row deleted in datatable

    wschung

      I am trying to create a datatable with a delete link in one of the datatable column, using rowKeyVar to label the row index in the link. After I added two rows and click the delete link on the first row, the second row is deleted. I can see the values that the action listener picks up is correct. Here is the code:

      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      <html xmlns="http://www.w3.org/1999/xhtml"
       xmlns:ui="http://java.sun.com/jsf/facelets"
       xmlns:h="http://java.sun.com/jsf/html"
       xmlns:f="http://java.sun.com/jsf/core"
       xmlns:t="http://myfaces.apache.org/tomahawk"
       xmlns:rich="http://richfaces.org/rich"
       xmlns:a4j="http://richfaces.org/a4j"
       xmlns:authz="http://sourceforge.net/projects/jsf-comp/acegijsf">
       <head>
       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
       <title>Edit Rich Order</title>
       </head>
       <body>
       <ui:composition>
       <f:view>
       <f:verbatim><h1>Create An Order</h1></f:verbatim>
       <h:messages showDetail="true" showSummary="false"/>
       <h:form>
       <h:commandButton value="Add Line Item" action="#{order.addItem}" immediate="true"/>
       <rich:dataTable value="#{order.lineItems}" var="item" rowKeyVar="rowId">
       <rich:column>
       <f:facet name="header">
       <t:outputText value="ID"/>
       </f:facet>
       <t:inputText value="#{item.id}"/>
       </rich:column>
       <rich:column>
       <f:facet name="header">
       <t:outputText value="Product Name"/>
       </f:facet>
       <t:inputText value="#{item.productName}"/>
       </rich:column>
       <rich:column>
       <t:commandLink action="#{order.removeItem}" immediate="true">
       <f:verbatim>Remove</f:verbatim>
       <f:param name="id" value="#{rowId}"/>
       </t:commandLink>
       </rich:column>
       </rich:dataTable>
       </h:form>
       <t:saveState value="#{order}"/>
       </f:view>
       </ui:composition>
       </body>
      </html>


      Order.removeItem():

      public String removeItem(){
      
       String value = (String) FacesContext.getCurrentInstance()
       .getExternalContext().getRequestParameterMap().get("id");
       int index = Integer.parseInt(value);
       lineItems.remove(index);
       return "success";
       }


      I saw the same problem with tomahawk. The example is adapted from tomahawk code. Am I missing something?


        • 1. Re: wrong row deleted in datatable
          jonckvanderkogel

          I have precisely this problem, have you been able to find a fix?

          • 2. Re: wrong row deleted in datatable
            jonckvanderkogel

            Just thought I'd let you know, I found the cause of the problem to be the immediate="true" attribute. Removing this will cause the correct row to be removed. Of course this is completely undesirable because in this situation validation errors in the row that's to be deleted will need to be resolved before the row can be deleted. Also the exact same table but this time with h:dataTable does show correct behavior.

            I'll be shooting in a bug in Jira for this one.