Pessoal, em uma p:datatable selecionável, ao selecionar um linha, e preencher o input com o valor “quantidade”, devo atualizar o campo “Valor Total”. Porém esta dando erro.
Vou postar o código do xhtml, do bean e do stacktrace. Irei anexar também uma imagem da tela para vocês terem noção.
XHTML:
[code]
<h:head></h:head>
<h:form>
<p:panelGrid columns="2">
<f:facet name="header">BUSCAR TRECHO</f:facet>
Origem: <h:selectOneMenu value="#{VooForm.voo.origemID}">
<f:selectItem itemLabel="-- SELECIONE --" noSelectionOption="true"></f:selectItem>
<f:selectItems value="#{VooForm.aeroportos}" var="aero"
itemValue="#{aero.codigo}" itemLabel="#{aero.nome}"></f:selectItems>
</h:selectOneMenu>
Destino: <h:selectOneMenu value="#{VooForm.voo.destinoID}">
<f:selectItem itemLabel="-- SELECIONE --" noSelectionOption="true"></f:selectItem>
<f:selectItems value="#{VooForm.aeroportos}" var="aero"
itemValue="#{aero.codigo}" itemLabel="#{aero.nome}"></f:selectItems>
</h:selectOneMenu>
Data: <p:calendar value="#{VooForm.voo.partida}" id="popupButtonCal" showOn="button" pattern="dd/MM/yyyy" required="true" requiredMessage="Escolha uma data" />
<f:facet name=“footer”>
<p:commandButton value=“Buscar” action="#{VooForm.getTrechos}" update=":tabela"></p:commandButton>
</f:facet>
</p:panelGrid>
</h:form>
<p:outputLabel id="tabela">
<h:form>
<f:ajax event="keyup" update="total">
<p:dataTable value="#{VooForm.trechos}" var="trecho" rendered="#{VooForm.tabelaOk}" emptyMessage="Nenhum vôo encontrado!" selectionMode="single" selection="#{UsuarioForm.trechoSelecionado}" rowKey="#{trecho.codigo}" >
<p:column headerText="Vôo">
<h:outputText value="#{trecho.codigo}"></h:outputText>
</p:column>
<p:column headerText="Partida">
<h:outputText value="#{trecho.partida}">
<f:convertDateTime dateStyle="medium" type="both" pattern="dd/MM/yyyy hh:MM"></f:convertDateTime>
</h:outputText>
</p:column>
<p:column headerText="Preço">
<h:outputText value="#{trecho.preco}">
</h:outputText>
</p:column>
<f:facet name="footer">
<p:commandButton value="Comprar" action="#{UsuarioForm.comprarPassagem}"></p:commandButton>
Quantidade: <p:inputText id="quantidade" value="#{UsuarioForm.quantidadePassagem}"></p:inputText>
Total: <h:outputText id="total" value="#{UsuarioForm.valorTotal}"></h:outputText>
</f:facet>
</p:dataTable>
</f:ajax>
</h:form>
</p:outputLabel>
</body>
[/code]
Bean UsuarioForm
[code]package forms;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import org.primefaces.model.SelectableDataModel;
import persistence.JPAResourceBean;
import entities.Aeroporto;
import entities.Promocao;
import entities.Usuario;
import entities.Voo;
@ManagedBean(name = “UsuarioForm” )
@ViewScoped
public class UsuarioForm {
private Usuario usuario = new Usuario();
private Voo trechoSelecionado;
private int quantidadePassagem = 1;
private double valorTotal = 0;
public double getValorTotal() {
return this.valorTotal = this.quantidadePassagem * this.trechoSelecionado.getPreco();
}
public void setValorTotal(double valorTotal) {
this.valorTotal = valorTotal;
}
public void setValorTotal(int valorTotal) {
this.valorTotal = valorTotal;
}
public int getQuantidadePassagem() {
return quantidadePassagem;
}
public void setQuantidadePassagem(int quantidadePassagem) {
this.quantidadePassagem = quantidadePassagem;
}
public Voo getTrechoSelecionado() {
return trechoSelecionado;
}
public void setTrechoSelecionado(Voo trechoSelecionado) {
this.trechoSelecionado = trechoSelecionado;
}
public Usuario getUsuario() {
return usuario;
}
public void setUsuario(Usuario usuario) {
this.usuario = usuario;
}
public String cadastrarUsuario(Usuario usuario){
EntityManager em = JPAResourceBean.getEntityManager();
try{
em.getTransaction().begin();
em.persist(usuario);
em.getTransaction().commit();
em.close();
}
catch(Exception e){
e.printStackTrace();
}
return null;
}
public String cadastrarPromocao(Promocao promocao){
EntityManager em = JPAResourceBean.getEntityManager();
try{
em.getTransaction().begin();
em.persist(promocao);
em.getTransaction().commit();
}
catch(Exception e){
e.printStackTrace();
}
return null;
}
public String fazerLogin(){
Usuario usu = null;
EntityManager em = JPAResourceBean.getEntityManager();
String jpql = "Select u from Usuario u where u.cpf = :login and u.senha = :senha";
Query q = em.createQuery(jpql, Usuario.class);
usu = (Usuario)q.setParameter("login", usuario.getCpf())
.setParameter("senha", usuario.getSenha())
.getSingleResult();
em.close();
if (usu != null) {
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("usuarioSessao", usu);
if (usu.isAdmin() == true)
return "adminPage";
else
return "usuarioPage";
} else {
return null;
}
}
public void comprarPassagem(){
Usuario u = (Usuario)FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("usuarioSessao");
System.out.println(u);
for (int i = 0; i < this.quantidadePassagem; i++) {
u.getVoos().add(trechoSelecionado);
}
EntityManager em = JPAResourceBean.getEntityManager();
em.getTransaction().begin();
em.merge(u);
em.getTransaction().commit();
em.close();
}
/*public Voo getRowData(String rowKey) {
//In a real app, a more efficient way like a query by rowKey should be implemented to deal with huge data
List<Voo> trechos = (List<Voo>) getWrappedData();
for(Voo v : trechos) {
if(v.getCodigo().equals(rowKey))
return v;
}
return null;
} */
public String logout() {
FacesContext.getCurrentInstance().getExternalContext().invalidateSession();
return “index”;
}
}[/code]
StackTrace:
[code]Nov 29, 2013 11:12:57 PM com.sun.faces.application.view.FaceletViewHandlingStrategy handleRenderException
SEVERE: Error Rendering View[/buscarTrecho.xhtml]
javax.el.ELException: /buscarTrecho.xhtml @77,68 value="#{UsuarioForm.valorTotal}": Error reading ‘valorTotal’ on type forms.UsuarioForm
at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:114)
at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194)
at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182)
at javax.faces.component.UIOutput.getValue(UIOutput.java:174)
at com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getValue(HtmlBasicInputRenderer.java:205)
at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getCurrentValue(HtmlBasicRenderer.java:355)
at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeEnd(HtmlBasicRenderer.java:164)
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:919)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1903)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1899)
at org.primefaces.component.datatable.DataTableRenderer.encodeFacet(DataTableRenderer.java:883)
at org.primefaces.component.datatable.DataTableRenderer.encodeMarkup(DataTableRenderer.java:218)
at org.primefaces.component.datatable.DataTableRenderer.encodeEnd(DataTableRenderer.java:83)
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:919)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1903)
at javax.faces.render.Renderer.encodeChildren(Renderer.java:176)
at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:889)
at org.primefaces.renderkit.CoreRenderer.renderChild(CoreRenderer.java:70)
at org.primefaces.renderkit.CoreRenderer.renderChildren(CoreRenderer.java:57)
at org.primefaces.component.outputlabel.OutputLabelRenderer.encodeEnd(OutputLabelRenderer.java:93)
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:919)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1903)
at com.sun.faces.context.PartialViewContextImpl$PhaseAwareVisitCallback.visit(PartialViewContextImpl.java:559)
at com.sun.faces.component.visit.PartialVisitContext.invokeVisitCallback(PartialVisitContext.java:183)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1729)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1740)
at com.sun.faces.context.PartialViewContextImpl.processComponents(PartialViewContextImpl.java:399)
at com.sun.faces.context.PartialViewContextImpl.processPartial(PartialViewContextImpl.java:319)
at org.primefaces.context.PrimePartialViewContext.processPartial(PrimePartialViewContext.java:57)
at javax.faces.component.UIViewRoot.encodeChildren(UIViewRoot.java:1004)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1896)
at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:425)
at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:120)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:219)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:647)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:947)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1009)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: javax.el.ELException: Error reading ‘valorTotal’ on type forms.UsuarioForm
at javax.el.BeanELResolver.getValue(BeanELResolver.java:98)
at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176)
at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203)
at org.apache.el.parser.AstValue.getValue(AstValue.java:183)
at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:185)
at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109)
… 52 more
Caused by: java.lang.NullPointerException
at forms.UsuarioForm.getValorTotal(UsuarioForm.java:36)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at javax.el.BeanELResolver.getValue(BeanELResolver.java:87)
… 57 more
Nov 29, 2013 11:12:57 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [Faces Servlet] in context with path [/TrabalhoTI2] threw exception
java.lang.IllegalStateException: CDATA tags may not nest
at com.sun.faces.renderkit.html_basic.HtmlResponseWriter.startCDATA(HtmlResponseWriter.java:681)
at javax.faces.context.ResponseWriterWrapper.startCDATA(ResponseWriterWrapper.java:179)
at javax.faces.context.PartialResponseWriter.startError(PartialResponseWriter.java:341)
at org.primefaces.context.PrimePartialResponseWriter.startError(PrimePartialResponseWriter.java:156)
at com.sun.faces.context.AjaxExceptionHandlerImpl.handlePartialResponseError(AjaxExceptionHandlerImpl.java:202)
at com.sun.faces.context.AjaxExceptionHandlerImpl.handle(AjaxExceptionHandlerImpl.java:126)
at javax.faces.context.ExceptionHandlerWrapper.handle(ExceptionHandlerWrapper.java:100)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:119)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:219)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:647)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:947)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1009)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)[/code]
Obrigado pela atenção!