Atualizar Campo via Ajax

0 respostas
L

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:

<!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:p="http://primefaces.org/ui"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:ui="http://java.sun.com/jsf/facelets">

<h:head></h:head>
<body>
<p:menubar>
<p:menuitem value="Painel de Controle" url="usuarioPage.xhtml" icon="ui-icon-gear"></p:menuitem>
</p:menubar>


	<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>
</html>

Bean UsuarioForm

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";
}




}

StackTrace:

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)

Obrigado pela atenção!

Criado 30 de novembro de 2013
Respostas 0
Participantes 1