Ir para conteúdo
Entre para seguir isso  
Guilherme do Vale

Não consigo pegar o valor do InputText depois que ele muda(JSF Primefa

Recommended Posts

Oi pessoal! Eu estou tentando pegar um valor de um inputtext digitado dentro de um datatable column e atualizar um outputtext de outra column com a multiplicação desse valor e de outro inputtext. Meu problema é que eu não consigo pegar o valor digitado quando o ajax é chamado porque vem o valor anterior do campo que recebe o valor (gasto.valor), não o valor atual digitado. Meu código:

 

XHTML

  <f:facet name="input">
                    <p:inputText id="inputValor" value="#{gasto.valor}"
                                 style="width:96%" onkeyup="mascara(this, valor)"
                                 onkeydown="mascara(this, valor)">
                        <f:convertNumber pattern="#,##0.00"></f:convertNumber>
                        <f:validator validatorId="MoedaValidator" />
                        <p:ajax  event="blur" render="outputVT" listener="#{cadastroContasBean.atualizaVT}" 
                                     execute="inputValor" process="@this" immediate="true" >
                        </p:ajax>
                    </p:inputText>
                </f:facet>

MB

public void atualizaVT(AjaxBehaviorEvent event) {

	Gastos gastoDataTableAtual = ((Gastos)dataTable.getRowData());

	if(!event.getComponent().getId().equals("inputQtd")){
		BigDecimal valorAtual = (BigDecimal)((UIOutput)event.getSource()).getValue();
		gastoDataTableAtual.setValorTotal(valorAtual.multiply(new BigDecimal(((Gastos)dataTable.getRowData()).getQuantidade())));
		Iterator<Gastos> gastosAsIterator = listaGasto.iterator();
		while (gastosAsIterator.hasNext()){
			Gastos it = gastosAsIterator.next();
			int id = 0;
			if(it.getId() == gastoDataTableAtual.getId()){
				//listaGasto.get(id).setValor(gastoDataTableAtual.getValor());
				listaGasto.get(id).setValorTotal(gastoDataTableAtual.getValorTotal());
				((Gastos)dataTable.getRowData()).setValorTotal(gastoDataTableAtual.getValorTotal());
				break;
			}
			id++;
		}
	}else{
		Integer valorAtual = (Integer)((UIOutput)event.getSource()).getValue();
		gastoDataTableAtual.setValorTotal(((Gastos)dataTable.getRowData()).getValor().multiply(new BigDecimal(valorAtual)));
		Iterator<Gastos> gastosAsIterator = listaGasto.iterator();
		int id = 0;
		while (gastosAsIterator.hasNext()){
			Gastos it = gastosAsIterator.next();
			if(it.getId() == gastoDataTableAtual.getId()){
				//listaGasto.get(id).setQuantidade(gastoDataTableAtual.getQuantidade());
				listaGasto.get(id).setValorTotal(gastoDataTableAtual.getValorTotal());
				((Gastos)dataTable.getRowData()).setValorTotal(gastoDataTableAtual.getValorTotal());
				break;
			}
			id++;
		}

Eu entendo que o evento "blur" do ajax é chamado antes de o "gasto.valor" ser mudado, mas quando eu mudo o evento do ajax pra "change" ou deixo sem event, o método não é chamado. Como eu pego esse valor?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui: criei um inputtext com getters e setters no managebean e fiz um bind com o inputttext do xhtml="true". Depois peguei o valor com "inputtext.getValue()" no método "atualizaVT()" chamado pelo event="change" do ajax.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
Entre para seguir isso  

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.