1
Based on the first example of the site Datatable Selection where a variable(linhaSelec
) receives the value selected by clicking on a <p:commandButton/>
I decided to mount my implementation but the variable that would have the value of the selected line comes null for the dialog I intended to use to change these values.
Stack trace:
Caused by: javax.el.PropertyNotFoundException: Target Unreachable, [linhaSelec] returned null
at org.apache.el.parser.AstValue.getTarget(AstValue.java:124)
at org.apache.el.parser.AstValue.getType(AstValue.java:58)
at org.apache.el.ValueExpressionImpl.getType(ValueExpressionImpl.java:168)
at com.sun.faces.facelets.el.TagValueExpression.getType(TagValueExpression.java:98)
... 41 more
Managedbean:
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.view.ViewScoped;
import com.company.sistema.model.Comercio;
import com.company.sistema.model.InfoAtividade;
@ManagedBean
@ViewScoped
public class ComercioBean implements Serializable {
private static final long serialVersionUID = 9095360855948557201L;
private InfoAtividade info;
private List<Comercio> tabela;
private Comercio linhaSelec;
public ComercioBean() {
info = new InfoAtividade();
info.setTipo("comercio");
tabela = new ArrayList<>();
tabela.add(new Comercio());
tabela.add(new Comercio());
tabela.add(new Comercio());
tabela.add(new Comercio());
tabela.add(new Comercio());
tabela.add(new Comercio());
tabela.forEach(var -> var.setInfoC(info));
info.setTabelaC(tabela);
}
public void calculaAlqt(ActionEvent action) {
linhaSelec.setAliquota(linhaSelec.getIrpj()
.add(linhaSelec.getCsll())
.add(linhaSelec.getCofins())
.add(linhaSelec.getPispasep())
.add(linhaSelec.getCpp())
.add(linhaSelec.getIcms()));
addMessage(linhaSelec.getIrpj().toString());
}
private void addMessage(String summary) {
FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, summary, null);
FacesContext.getCurrentInstance().addMessage(null, message);
}
public void calculaReferencias(ActionEvent action) {
linhaSelec.setIrpj(linhaSelec.getAliquota().multiply(linhaSelec.getIrpj()).divide(new BigDecimal("100.0")));
linhaSelec.setCsll(linhaSelec.getAliquota().multiply(linhaSelec.getCsll()).divide(new BigDecimal("100.0")));
linhaSelec.setCofins(linhaSelec.getAliquota().multiply(linhaSelec.getCofins()).divide(new BigDecimal("100.0")));
linhaSelec.setPispasep(linhaSelec.getAliquota().multiply(linhaSelec.getPispasep()).divide(new BigDecimal("100.0")));
linhaSelec.setCpp(linhaSelec.getAliquota().multiply(linhaSelec.getCpp()).divide(new BigDecimal("100.0")));
linhaSelec.setIcms(linhaSelec.getAliquota().multiply(linhaSelec.getIcms()).divide(new BigDecimal("100.0")));
}
public void salvarTabela(ActionEvent action) {
}
public void buscaTabela(ActionEvent action) {
}
public void deletaTabela(ActionEvent action) {
}
public Comercio getLinhaSelec() {
return linhaSelec;
}
public void setLinhaSelec(Comercio linhaSelec) {
this.linhaSelec = linhaSelec;
}
public InfoAtividade getInfo() {
return info;
}
public void setInfo(InfoAtividade info) {
this.info = info;
}
public List<Comercio> getTabela() {
return tabela;
}
public void setTabela(List<Comercio> tabela) {
this.tabela = tabela;
}
}
And the xhtml:
<!DOCTYPE html>
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:p="http://primefaces.org/ui"
template="/WEB-INF/templates/Layout.xhtml">
<ui:define name="content">
<h1 class="aw-page-title">Gerenciamento de Comércio</h1>
<h:form id="frmComercio">
<h:panelGrid columns="2" cellpadding="5">
<p:outputLabel for="nome" value="Nome:" />
<p:inputText id="nome" required="true"
value="#{comercioBean.info.nome}" />
<p:outputLabel for="descricao" value="Descrição:" />
<p:inputTextarea id="descricao" required="true"
value="#{comercioBean.info.descricao}" />
</h:panelGrid>
<br />
<p:separator />
<br />
<p:dataTable id="tablComercio" var="comercio"
value="#{comercioBean.tabela}" style="margin-bottom:20px">
<f:facet name="header">
Nova Tabela de Comércio
</f:facet>
<p:column headerText="Receita Bruta Máx.">
<h:outputText value="#{comercio.receitaBrtMax}" />
</p:column>
<p:column headerText="Receita Bruta Min.">
<h:outputText value="#{comercio.receitaBrtMin}" />
</p:column>
<p:column headerText="Alíquota">
<h:outputText value="#{comercio.aliquota}" />
</p:column>
<p:column headerText="IRPJ">
<h:outputText value="#{comercio.irpj}" />
</p:column>
<p:column headerText="CSLL">
<h:outputText value="#{comercio.csll}" />
</p:column>
<p:column headerText="Cofins">
<h:outputText value="#{comercio.cofins}" />
</p:column>
<p:column headerText="PIS/PASEP">
<h:outputText value="#{comercio.pispasep}" />
</p:column>
<p:column headerText="Cpp">
<h:outputText value="#{comercio.cpp}" />
</p:column>
<p:column headerText="Icms">
<h:outputText value="#{comercio.icms}" />
</p:column>
<p:column headerText="Valor a Deduzir">
<h:outputText value="#{comercio.valorDeduzir}" />
</p:column>
<p:column style="width:32px;text-align: center">
<p:commandButton update=":frmComercio:comercioGrd"
oncomplete="PF('comercioDialog').show()" icon="ui-icon-search"
title="Editar">
<f:setPropertyActionListener value="#{comercio}"
target="#{comercioBean.linhaSelec}" />
</p:commandButton>
</p:column>
</p:dataTable>
<p:toolbar>
<f:facet name="left">
<p:growl id="growl" sticky="true" />
<p:commandButton id="btnSalvar" value="Salvar" icon="ui-icon-disk"
actionListener="#{comercioBean.salvarTabela}" />
<p:commandButton id="btnBusca" value="Buscar"
icon="fa fa-fw fa-search"
actionListener="#{comercioBean.buscaTabela}" />
</f:facet>
<f:facet name="right">
<p:commandButton id="btnDeletar" value="Deletar"
icon="ui-icon-trash" actionListener="#{comercioBean.deletaTabela}" />
</f:facet>
</p:toolbar>
<p:dialog header="Linha" widgetVar="comercioDialog" modal="true"
showEffect="fade" hideEffect="fade" resizable="false">
<p:outputPanel id="comercioGrd">
<p:panelGrid columns="2">
<p:outputLabel for="fldReceitaBrtMx" value="Receita Bruta Máx." />
<p:inputText value="#{comercioBean.linhaSelec.receitaBrtMax}"
style="width:100%" id="fldReceitaBrtMx" />
<p:outputLabel for="fldReceitaBrtMn" value="Receita Bruta Min." />
<p:inputText value="#{comercioBean.linhaSelec.receitaBrtMin}"
style="width:100%" id="fldReceitaBrtMn" />
<p:outputLabel for="fldAlqt" value="Alíquota" />
<p:inputText value="#{comercioBean.linhaSelec.aliquota}"
style="width:100%" id="fldAlqt" />
<p:outputLabel for="fldIrpj" value="IRPJ" />
<p:inputText value="#{comercioBean.linhaSelec.irpj}"
style="width:100%" id="fldIrpj" />
<p:outputLabel for="fldCsll" value="CSLL" />
<p:inputText value="#{comercioBean.linhaSelec.csll}"
style="width:100%" id="fldCsll" />
<p:outputLabel for="fldCofins" value="Cofins" />
<p:inputText value="#{comercioBean.linhaSelec.cofins}"
style="width:100%" id="fldCofins" />
<p:outputLabel for="fldPispasep" value="PIS/PASEP" />
<p:inputText value="#{comercioBean.linhaSelec.pispasep}"
style="width:100%" id="fldPispasep" />
<p:outputLabel for="fldCpp" value="Cpp" />
<p:inputText value="#{comercioBean.linhaSelec.cpp}"
style="width:100%" id="fldCpp" />
<p:outputLabel for="fldIcms" value="Icms" />
<p:inputText value="#{comercioBean.linhaSelec.icms}"
style="width:100%" id="fldIcms" />
<p:outputLabel for="fldVlDeduzir" value="Valor a Deduzir" />
<p:inputText value="#{comercioBean.linhaSelec.valorDeduzir}"
style="width:100%" id="fldVlDeduzir" />
<p:commandButton value="Calcular Aliquota" id="btnAlqt"
actionListener="#{comercioBean.calculaAlqt}" />
<p:commandButton value="Calcular Referencia" id="btnReferencias"
actionListener="#{comercioBean.calculaReferencias}"
/>
</p:panelGrid>
</p:outputPanel>
</p:dialog>
</h:form>
</ui:define>
</ui:composition>
Follow the template code:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:p="http://primefaces.org/ui">
<h:head>
<f:facet name="first">
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
</f:facet>
<title>NomeAPP</title>
<h:outputStylesheet library="company" name="styles/custom.css" />
<h:outputStylesheet library="company" name="styles/layout.css" />
<h:outputStylesheet library="company" name="styles/components.css" />
<h:outputScript target="body" library="primefaces"
name="jquery/jquery.js" />
<h:outputScript target="body" library="company"
name="javascripts/app.js" />
</h:head>
<h:body>
<header class="aw-topbar">
<h:graphicImage library="company" name="images/logo.png" />
<a href="javascript:void(0);" class="aw-toggle js-toggle"><i
class="fa fa-bars"></i></a>
</header>
<aside class="aw-sidebar js-sidebar">
<nav class="aw-menu">
<h:form>
<p:menu>
<p:submenu label="Principal">
<p:menuitem value="Início" icon="fa fa-fw fa-home" outcome="/faces/Index.xhtml" />
</p:submenu>
<p:submenu label="Funcionais">
<p:menuitem value="Option1" icon="fa fa-fw fa-bar-chart" />
<p:menuitem value="Option2" icon="fa fa-fw fa-copyright" />
</p:submenu>
<p:submenu label="Atividades">
<p:menuitem value="Comércio" icon="fa fa-fw fa-shopping-cart" outcome="/faces/atividades/Comercio.xhtml" />
<p:menuitem value="Option2" icon="fa fa-fw fa-building" />
<p:menuitem value="Option 3" icon="fa fa-fw fa-cubes" />
<p:menuitem value="Option 4" icon="fa fa-fw fa-cubes" />
<p:menuitem value="Option5" icon="fa fa-fw fa-cubes" />
</p:submenu>
<p:submenu label="Conta">
<p:menuitem value="Sobre" icon="fa fa-fw fa-info-circle" outcome="/faces/Sobre.xhtml" />
</p:submenu>
</p:menu>
</h:form>
</nav>
</aside>
<section class="aw-content js-content">
<ui:insert name="content" />
</section>
</h:body>
</html>
See in the browser console if there is no error message.
– NilsonUehara
You can post your template (Layout.xhtml)?
– NilsonUehara
Nothing appears on the console, about the template I’ll see here but I think the question will exceed the size limit... Sorry it took me so long to answer
– William.Andrade