A4j

Boa Tarde.
Como posso fazer um calculo usando a4j + JSF.
Tenho a seguinte situação:

No ManagedBean

private Integer qtd;
private BigDecimal unit;

public Integer getQtd() {
    return qtd;
}
public void setQtd(Integer qtd) {
    this.qtd = qtd;
}

public BigDecimal getUnit() {
    return unit;
}
public void setUnit(BigDecimal unit) {
    this.unit = unit;
}

public BigDecimal getTotal() {
    return this.getUnit().multiply(BigDecimal.valueOf(this.getQtd()));
}

No JSP

<t:inputText value="#{ManagedBean.qtd}" styleClass="textField" size="2" >
    <a4j:support event="onblur" reRender="Total" />
</t:inputText>
<t:inputText value="#{ManagedBean.unit}" styleClass="textField" size="10" >
    <f:converter converterId="MyBigDecimalConverter" />
    <a4j:support event="onblur" reRender="Total" />
</t:inputText>
<t:inputText id="Total" value="#{ManagedBean.total}" styleClass="textField" size="10" >
    <f:converter converterId="MyBigDecimalConverter" />
</t:inputText>

Aguardo sugestões de como fazer isso usando A4J + JSF.

Percebo que o metodo getTotal() é processado corretamente nos eventos onblur, porem as propriedades qtd e unit do MB não sao atualizadas imediatamente apos o evento. Como posso forçar a atualização das propriedades qtd e unit do MB atraves do A4j ?

tente dar um id pro seu form e no reRender coloque apenas esse id do form…veja se funiona assim…

Não deu certo.

Não há necessidade de “reRenderizar” o form, tente usar da mesma maneira como foi usado no jsp, passando id do seu inputText, deve funcionar, sim !!!

faz assim…no seu a4j coloque :

&lt;a4j:support event="onchange" action="#{seuHandler.metodoCalculo}" status="commonstatus"
reRender="total" immediate="true" id="supportAjax" /&gt;

Lá no seu handler (ManagedBean) vc cria um método público q será chamado via ajax…lá vc faz as contas e retorna os valores pros outputs…

E sugiro q vc use o binding ao invés do value…