[Resolvido]Submit de uma List com JSF

1 resposta
ErickRAR

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.

1 Resposta

ErickRAR

Consegui com a tag <f:attibute>

<p:column headerText="#{msg.quantidade}">
							<pm:inputRange value="#{itemPedido.quantidade}" maxValue="10" minValue="0"
								label="#{msg.pedidoQuantidade}" valueChangeListener="#{pedidoControle.onEdit}">
 								<f:attribute name="itemPedido" value="#{itemPedido}"/>
							</pm:inputRange>
						</p:column>

E no bean só coloquei isso:

public void onEdit(ValueChangeEvent event) {
		ItemPedido ip = (ItemPedido)event.getComponent().getAttributes().get("itemPedido");
		ip.setQuantidade((Integer)event.getNewValue());
	...
    }
Criado 26 de setembro de 2012
Ultima resposta 27 de set. de 2012
Respostas 1
Participantes 1