rich dataTable, last line data lost when deleting a row
sressi Apr 2, 2010 4:55 PMHi,
I'm having some problems trying to delete a row from a dataTable. The thing is that when I delete a row (action="#{indicador.deleteValorEnum}"), the data from last line gets deleted too, not the row, just the value. For example if I have a 3 row table and row number 2 is deleted, then value on inputText 3 is deleted too. Here's the code:
<rich:dataTable cellpadding="0" cellspacing="0" id="enumerado" rows="5" border="0"
var="enum" value="#{indicador.enumerado}" align="center" first="#{indicador.rowE}">
<f:facet name="header">
<rich:columnGroup>
<rich:column width="50px">
<h:outputText value="#" />
</rich:column>
<rich:column width="200px">
<h:outputText value="Valor" />
</rich:column>
<rich:column width="70px">
<h:outputText value="Borrar?" />
</rich:column>
</rich:columnGroup>
</f:facet>
<rich:column>
<t:panelGrid align="center" columns="1" style="width:30px;text-align:center;">
<h:outputText value="#{enum.num}"styleClass="formbody"/>
</t:panelGrid>
</rich:column>
<rich:column>
<t:panelGrid align="center" columns="1">
<h:inputText value="#{enum.valor}" label="Valor #{enum.num} del enumerado" styleClass="formbody" size="30" required="true"/>
</t:panelGrid>
</rich:column>
<rich:column>
<t:panelGrid align="center" columns="1">
<a4j:commandLink action="#{indicador.deleteValorEnum}" immediate="true" reRender="enumerado,enumscroller,err" styleClass="formbody" onclick="if (!confirm('Confirma la eliminación del valor?')) return false">
<h:outputText styleClass="Link" value="Eliminar" />
<t:updateActionListener property="#{auxBean.idvalor}" value="#{enum.num}" />
</a4j:commandLink>
</t:panelGrid>
</rich:column>
<f:facet name="footer">
<rich:datascroller id="enumscroller" for="enumerado" maxPages="3" align="center"/>
</f:facet>
</rich:dataTable>
and deleteValorEnum code:
public String deleteValorEnum(){
Iterator<ValorEnumerado> it = this.getEnumerado().iterator();
Collection<ValorEnumerado> aux = new ArrayList<ValorEnumerado>();
ValorEnumerado valor;
Integer idvalor = ((AuxBean)FacesUtils.getManagedBean("auxBean")).getIdvalor();
while (it.hasNext()){
valor = (ValorEnumerado)it.next();
if (valor.getNum().intValue() != idvalor.intValue())
aux.add(valor);
}
this.setEnumerado(new ArrayList<ValorEnumerado>(aux));
it = this.getEnumerado().iterator();
int num = 1;
while (it.hasNext()){
valor = (ValorEnumerado)it.next();
valor.setNum(new Integer(num));
num++;
}
rowE = new Integer(0);
return "deleted";
}
Any suggestions are greately appreciated.
Thanks.
Sebastián