Tenho um datatable onde a ultima coluna possui um campo pro usuário digitar a quantidade desejada. Eu queria que, quando ele alterasse a quantidade, eu salvasse o item em uma lista, ou então, quando ele clicar em enviar, passe a lista completa e eu verifico quais itens possui uma quantidade válida.
Tentei colocar propertyActionlistener mas não funciona, pois mudar o valor no campo não é uma action. Também tentei com valueChange, mas não tenho idéia de como saber qual linha foi alterada.
Enfim, a parte código que interessa:
<p:dataTable var="item" value="#{pedidoControle.itensPedidos}" >
<p:column style="width:4%">
<p:rowToggler />
</p:column>
<p:column>
<h:outputText value="#{item.produto.nome}" />
</p:column>
<p:column>
<h:outputText value="#{item.produto.preco}">
<f:convertNumber type="currency" />
</h:outputText>
</p:column>
<p:column>
<pm:inputRange id="quantidade" value="#{item.quantidade}" minValue="0" maxValue="10"
label="#{msg.quantidade}" valueChangeListener="#{pedidoControle.valueChangeListener}" />
</p:column>
<p:rowExpansion>
<h:outputText value="#{item.produto.descricao}" />
</p:rowExpansion>
</p:dataTable>
<p:commandButton value="#{msg.fazerPedido}"
action="#{pedidoControle.pedirItens}" update=":fazerPedidoForm"/>
@ManagedBean
@SessionScoped
public class PedidoControle implements Serializable{
...
...
...
public void valueChangeListener(ValueChangeEvent event){
//Consigo o valor certo, mas não sei como descobrir de qual linha foi alterado.
try {
System.out.println((Integer)event.getNewValue());
} catch (ClassCastException e) {
e.printStackTrace();
}
}
Edit: Pelo titulo pode parecer confuso, mas não dá pra botar um titulo gigante. Pode ser o submit da lista toda e eu controlo depois, ou então ir um por um pelas linhas que forem sendo alteradas.