[Dúvida] Input Field value listener em JSP

1 resposta
R

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:
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);
    }

}

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).

[img]http://imageshack.com/a/img538/9828/pQScBx.jpg[/img]

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

1 Resposta

dlsilva1812

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

Criado 15 de abril de 2015
Ultima resposta 8 de jun. de 2015
Respostas 1
Participantes 2