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?