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.
/*
* 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;
}
}
<?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>