我试图从输入文本中获取一个值,该输入文本在数据表列中输入,并使用此inputtext值和其他inputtext值的乘法更新其他列的outputtext。我的问题是,当调用ajax时,我无法输入值,因为我从接收值(gasto.valor)的字段中获取了前一个值,而不是当前输入的值。这是我的代码:
XHTML
<p:dataTable binding="#{cadastroContasBean.dataTable}" var="gasto"
value="#{cadastroContasBean.listaGasto}" scrollable="true"
scrollHeight="150" editable="true" editMode="cell" id="Tabela"
widgetVar="wTabela">
<p:column headerText="Nome">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{gasto.nome}" />
</f:facet>
<f:facet name="input">
<p:inputText value="#{gasto.nome}" style="width:96%" />
</f:facet>
</p:cellEditor>
</p:column>
<p:column headerText="Quantidade">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{gasto.quantidade}" />
</f:facet>
<f:facet name="input">
<p:inputText id="inputQtd" value="#{gasto.quantidade}"
style="width:96%" onkeydown="MascaraNumero()"
onkeyup="MascaraNumero()">
<p:ajax event="blur" render="outputVT" listener="#{cadastroContasBean.atualizaVT}" execute="inputQtd" process="@this" immediate="true"/>
</p:inputText>
</f:facet>
</p:cellEditor>
</p:column>
<p:column headerText="Valor">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{gasto.valor}">
<f:convertNumber currencySymbol="R$" type="currency" />
</h:outputText>
</f:facet>
<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>
</p:cellEditor>
</p:column>
<p:column headerText="Valor Total" id="vt">
<h:outputText id="outputVT" value="#{gasto.valorTotal}">
<f:convertNumber currencySymbol="R$" type="currency" />
</h:outputText>
</p:column>
</p:dataTable>
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++;
}
我明白了ajax事件&#34;模糊&#34;之前被称为&#34; gasto.valor&#34;已更改,但当我将ajax事件更改为&#34;更改&#34;方法&#34; atualizaVT&#34;不叫。我怎样才能得到这个值?
答案 0 :(得分:0)
&#34;变更&#34; event不是AjaxBehaviorEvent。 尝试无争议地实现atualizaVT 这样:
public void atualizaVT(){
这应该有用。