Calcalos em CRUD Primefaces JSF

4 respostas
lucasmartins

Boa notie galera, estou fazendo um trabalho que envolve um CRUD de produtos com alguns cálculos. Queria saber como faço pra que ando eu alterar por exemplo o camplo Lucro (%) ele calcule no campo VlTotal, e vice-versa, em desktop eu sabia fazer, mas agora na Web to penando. Tem algum evento tipo o onExit do campo para ele fazer este calculo?
Seguem os códigos pra análise. Obrigado.

Controle:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.nfacil.control;

import br.com.nfacil.converter.ConverterGenerico;
import br.com.nfacil.facade.ProdutoFacade;
import br.com.nfacil.facade.GrupoFacade;
import br.com.nfacil.model.Grupo;
import br.com.nfacil.model.Produto;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.convert.Converter;
import javax.faces.event.ActionEvent;
import javax.faces.model.SelectItem;

/**
 *
 * @author lucas
 */
@ManagedBean(name = "produtoControle")
@SessionScoped
public class ProdutoControle implements Serializable {

    private Produto produto = new Produto();
    @EJB
    private ProdutoFacade produtoFacade;
    @EJB
    private GrupoFacade grupoFacade;
       
    
    private Converter grupoConverter;
    private List<Grupo> lista = new ArrayList<Grupo>();

   private List<Produto> listap = new ArrayList<Produto>();

    public void salvar() {
        produtoFacade.salvar(produto);
    }

    public void novo() {
        produto = new Produto();
    }

    public Converter getGrupoConverter() {
        if (grupoConverter == null) {
            grupoConverter = new ConverterGenerico(grupoFacade);
        }
        return grupoConverter;
    }

    public void setGrupoConverter(Converter GrupoConverter) {
        this.grupoConverter = GrupoConverter;
    }

    public void editar(ActionEvent e) {
        produto = (Produto) e.getComponent().getAttributes().get("produto");
    }

    public void excluir(ActionEvent e) {
        produto = (Produto) e.getComponent().getAttributes().get("produto");
        produtoFacade.remove(produto);
    }

    public List<Produto> getLista() {
        return produtoFacade.consultar();
    }

    public void setLista(List<Produto> listap) {
        this.listap = listap;
    }


    public List<Produto> getListap() {
        return listap;
    }

    public void setListap(List<Produto> listap) {
        this.listap = listap;
    }
    

    public ProdutoFacade getProdutoFacade() {
        return produtoFacade;
    }

    public void setProdutoFacade(ProdutoFacade produtoFacade) {
        this.produtoFacade = produtoFacade;
    }

    public Produto getProduto() {
        return produto;
    }

    public void setProduto(Produto produto) {
        this.produto = produto;
    }
    public void calculaTotal(){
      
    }

    public List<SelectItem> getProdutos() {
        List<SelectItem> listaProdutos = new ArrayList<SelectItem>();
        for (Produto p : produtoFacade.consultar()) {
            listaProdutos.add(new SelectItem(p, p.getDescricao()));
        }
        return listaProdutos;
    }
       public List<SelectItem> getGrupos() {
        List<SelectItem> listaGrupos = new ArrayList<SelectItem>();
        for (Grupo g : grupoFacade.consultar()) {
            listaGrupos.add(new SelectItem(g, g.getNome()));
        }
        return listaGrupos;
    }
}
View:
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:p="http://primefaces.org/ui"
      xmlns:f="http://java.sun.com/jsf/core">
    <h:outputScript library="js" name="locale-primefaces.js"/>
    <ui:decorate template="/WEB-INF/WebTemplate.xhtml">
        <ui:define name="menu"></ui:define>
        <ui:define name="centro">
            <h:form>
                <p:fieldset legend="Gestão de Produtos">
                    <p:growl id="messages"/>
                    <p:fieldset legend="Dados Iniciais" toggleable="true" id="fsdadosini">
                        <p:panelGrid columns="2">
                            <h:outputText value="Código"/>
                            <p:inputText value="#{produtoControle.produto.id}" readonly="true"/>
                            <h:outputText value="Descrição"/>
                            <p:inputText value="#{produtoControle.produto.descricao}" required="true"
                                         requiredMessage="A descrição é de preenchimento obrigatório" size="100" maxlength="180"/>
                            <h:outputText value="Marca"/>
                            <p:inputText value="#{produtoControle.produto.marca}" size="50"/>
                            <h:outputText value="Código de Barras"/>
                            <p:inputText value="#{produtoControle.produto.codbarras}" size="30"/>
                            <h:outputText value="NCM"/>
                            <p:inputText value="#{produtoControle.produto.ncm}" size="30" maxlength="8"/>
                            <h:outputText value="Unidade de Medida"/>
                            <p:inputText value="#{produtoControle.produto.unmed}" size="15"/>
                            <h:outputText value="Estoque"/>
                            <p:inputText value="#{produtoControle.produto.estoque}" size="30" maxlength="10"/>
                        </p:panelGrid>
                    </p:fieldset>
                    <p:fieldset legend="Dados Financeiros" toggleable="true" id="fsfinanceiro">
                        <p:panelGrid columns="4">
                            <h:outputText value="Preço de Custo (R$)"/>
                            <p:inputText value="#{produtoControle.produto.vlcusto}" size="20" mask="0.00" id="vlcusto">
                                <f:convertNumber
                                    type="number"
                                    maxFractionDigits="2"
                                    minFractionDigits="2"/>
                                <p:ajax update="@this"/>
                            </p:inputText>
                            <h:outputText value="Percentual de Lucro bruto"/>
                            <p:inputText value="#{produtoControle.produto.perlucro}" size="20" maxlength="6">
                                <f:convertNumber
                                    type="percent"
                                    maxFractionDigits="2"
                                    minFractionDigits="2"/>
                                <p:ajax update="@this"/>
                            </p:inputText>
                            <h:outputText value="Valor do Lucro Bruto (R$)" id="lucroreal"/>
                            <p:inputText value="#{produtoControle.produto.vlucro}" size="20" maxlength="6">
                                <f:convertNumber
                                    type="number"
                                    maxFractionDigits="2"
                                    minFractionDigits="2"/>
                                <p:ajax  update="@this, vlvenda"/>
                            </p:inputText>
                            <h:outputText value="Valor de Venda"/>
                            <p:inputText value="#{produtoControle.produto.vlvenda}" size="20" maxlength="6" id="vlvenda">
                                <f:convertNumber
                                    type="number"
                                    maxFractionDigits="2"
                                    minFractionDigits="2"/>
                                <p:ajax update="@this"/>
                            </p:inputText>
                            <h:outputText value="Desconto (%)"/>
                            <p:inputText value="#{produtoControle.produto.perlucro}" size="20" maxlength="6">
                                <f:convertNumber
                                    type="percent"
                                    maxFractionDigits="2"
                                    minFractionDigits="2"/>
                                <p:ajax update="@this"/>
                            </p:inputText>
                        </p:panelGrid>
                    </p:fieldset>
                    <p:fieldset legend="Fiscal" toggleable="true" id="fsfiscal">
                        <p:panelGrid columns="4">
                            <h:outputText value="Alíquota ICMS"/>
                            <p:inputText value="#{produtoControle.produto.alicms}" size="10" maxlength="10">
                                <f:convertNumber
                                    type="percent"
                                    maxFractionDigits="2"
                                    minFractionDigits="2"/>
                                <p:ajax update="@this"/>
                            </p:inputText>
                            <h:outputText value="Alíquota PIS"/>
                            <p:inputText value="#{produtoControle.produto.alpis}" size="10" maxlength="10">
                                <f:convertNumber
                                    type="percent"
                                    maxFractionDigits="2"
                                    minFractionDigits="2"/>
                                <p:ajax update="@this"/>
                            </p:inputText>
                            <h:outputText value="Alíquota COFINS"/>
                            <p:inputText value="#{produtoControle.produto.alcofins}" size="10" maxlength="10">
                                <f:convertNumber
                                    type="percent"
                                    maxFractionDigits="2"
                                    minFractionDigits="2"/>
                                <p:ajax update="@this"/>
                            </p:inputText>
                        </p:panelGrid>
                    </p:fieldset>
                    <p:fieldset legend="Outros dados">
                        <p:panelGrid columns="4">

                            <h:outputText value="Grupo"/>
                            <p:selectOneMenu value="#{produtoControle.produto.grupo}" converter="#{produtoControle.grupoConverter}">
                                <f:selectItems value="#{produtoControle.grupos}"/>
                            </p:selectOneMenu>
                            <p:selectBooleanCheckbox label="Registro Ativo?" required="true" 
                                                     requiredMessage="Informe se o registro encontra-se ativo ou não" 
                                                     itemLabel="Ativo" value="#{produtoControle.produto.ativo}">                      
                            </p:selectBooleanCheckbox>
                        </p:panelGrid>
                    </p:fieldset>
                    <p:commandButton value="Salvar" actionListener="#{produtoControle.salvar()}" ajax="false"/>
                    <p:commandButton value="Cancelar" action="/relatorios/produtolista" actionListener="#{produtoControle.novo()}" ajax="false" immediate="true"/>
                </p:fieldset>
            </h:form>

        </ui:define>

    </ui:decorate>
</html>

4 Respostas

R

tags html:

onkeyup
oninput (html5)

e por ai vai.

onblur = ele atualiza o componente ao perder o foco do mesmo. Tipo mudar para outro campo.

Da uma olhada no site da w3schools, tem muito informação excelente lá.

Hebert_Coelho

Você pode utilizar ajax:
JSF Exemplos Simples com Ajax

lucasmartins

Obrigado galera!

lucasmartins

Galera, eu sou bem ignorante em programação pra web. no meu bean como digo que tal input é referente a tal atributo? tipo eu queria fazer um calculo assim:

public void getCalculaTotal(){

produto.vlTotal = produto.vlcusto + produto.vlucro;
}

Mas como faço a passagem de parametros? pra pegar o valor la da view

Eu quero usar o evento onblur.
Obrigado.
Abraço.

Criado 24 de setembro de 2012
Ultima resposta 25 de set. de 2012
Respostas 4
Participantes 3