更改后,无法在ajax上获取inputtext值

时间:2016-05-29 17:14:51

标签: ajax jsf primefaces

我试图从输入文本中获取一个值,该输入文本在数据表列中输入,并使用此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;不叫。我怎样才能得到这个值?

1 个答案:

答案 0 :(得分:0)

&#34;变更&#34; event不是AjaxBehaviorEvent。 尝试无争议地实现atualizaVT 这样:

public void atualizaVT(){

这应该有用。