[Dúvida] Input Field value listener em JSP

Estou estudando o VRaptor e comecei a pouco tempo com JSP e estou com dúvidas para implementar um projeto de testes que estou fazendo.

Possui a classe VendaItem conforme abaixo que tem os atributos quantidade, unitario e desconto, e a partir deles calcula os totais:

[code]import java.math.BigDecimal;

/**

  • VendaItem.class

  • @author Ranlive Hrysyk

  • @since 13/04/2015
    */
    public class VendaItem {

    private BigDecimal quantidade = BigDecimal.TEN;
    private BigDecimal unitario = BigDecimal.TEN;
    private BigDecimal desconto = BigDecimal.TEN;

    public VendaItem() {
    }

    public BigDecimal getQuantidade() {
    return quantidade;
    }

    public void setQuantidade(BigDecimal quantidade) {
    this.quantidade = quantidade;
    }

    public BigDecimal getUnitario() {
    return unitario;
    }

    public void setUnitario(BigDecimal unitario) {
    this.unitario = unitario;
    }

    public BigDecimal getSubtotal() {
    return quantidade.multiply(unitario);
    }

    public BigDecimal getDesconto() {
    return desconto;
    }

    public void setDesconto(BigDecimal desconto) {
    this.desconto = desconto;
    }

    public BigDecimal getTotal() {
    return getSubtotal().subtract(desconto);
    }

}[/code]

Gostaria de criar uma tela que possui a quantidade, o unitário e o desconto editáveis, e os campos subtotal e total somente ready only, sendo que ao peder o foco dos campos é calculado automaticamente os totais, ou seja, possui, um binding em cada campo que atualiza os campos de totais, sendo que a regra de calculo esta no servidor (na entidade VendaItem).

Como faço para fazer algo parecido, seja por AJAX, JQuery, etc? Sendo que estou utilizando JSP para apresentação.

Boa tarde caro amigo, não sei se você já resolveu este seu problema, mas, a recém que estou lendo seu tópico.
Bom vamos lá, eu uso JSF aqui e acredito que você poderá fazer algo parecido:

na Sua Interface

<h:inputText binding="#{suaEntidade.quantidade}" id="quantidade">
<a4j:support action="#{seuControler.seuMetodo}" event="onblur" reRender="subTotal"/>
</h:inputTex>

<h:inputText binding="#{suaEntidade.unitario}" id="unitario">
<a4j:support action="#{seuControler.seuMetodo}" event="onblur" reRender="subTotal"/>
</h:inputTex>

<h:inputText binding="#{suaEntidade.subTotal}" id="subTotal" readOnly="true"/>

<h:inputText binding="#{suaEntidade.desconto}" id="desconto">
<a4j:support action="#{seuControler.seuMetodo}" event="onblur" reRender="subTotal"/>
</h:inputTex>

No Java use assim
Obs.: referente ao binding use variáveis correspondentes ao componente tipo:

public HtmlInputText unitario = new HtmlInputText();

public HtmlInputText getUnitario() {
		return unitario;
	}

public void setUnitario(HtmlInputText nitario) {
		this.unitario= unitario;
	}

No seu controler

public void seuMetodo{
faça toda sua lógica aqui setando o valor para o campo subtotal
algo como:
this.subtotal.setValue(resultado da expressão quantidade*unitario);

Bom caro amigo eu uso em várias telas esta rotina e funciona perfeitamente.
Caso não funcionar experimente mudar a assinatura do método para String retornando o nome da sua interface.

Espero ter ajudado e desculpe responder só agora.

Att.
Diego Silva