Jump to content
Sign in to follow this  
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?

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.