NullPointerException ao chamar método via Ajax

11 respostas
Diego_Adriano

Bem galera, eu preciso efetuar um cálculo com algumas informações vinda da tela, porém estou encontrando um problema ao chamar o método ..
vou postar o cod abaixo ..

public void perimetria(){
	Calculos calculos = new Calculos();
	avaliacao.setTatalDobras_Cutaneas(calculos.somaPerimetria(avaliacao));
}
public Double somaPerimetria(Avaliacao avaliacao){
		
Double total = avaliacao.getAntebraco_direito()+avaliacao.getAntebraco_esquerda()+avaliacao.getBraco_contraido_direita()+
avaliacao.getBraco_contraido_esquerda()+avaliacao.getBraco_relaxado_direita()+avaliacao.getBraco_relaxado_esquerda()+
		avaliacao.getCintura()+avaliacao.getTorax()+avaliacao.getQuadril()+
		avaliacao.getCoxa_media_direita()+avaliacao.getCoxa_media_esquerda()+
		avaliacao.getPanturrilha_direita()+avaliacao.getPanturrilha_esquerda();
		
	System.out.println(total);
	return total;
}
<h:panelGroup id="dados" layout="block" style="text-align:left">
	    			    			
	<h:outputText for="avaliacao-peso" value="Massa Corporal : "/>
	<p:inputText
			id="avaliacao-peso"
		    	required="true"
		    	size="5"
		    	value="#{avaliacaoBean.avaliacao.peso}"/>
			    					
	<h:outputText for="avaliacao-altura" value="  Estatura : "/>
	<p:inputText 
		    	id="avaliacao-altura"
		    	required="true"
		    	size="5"
		    	value="#{avaliacaoBean.avaliacao.altura}"/>
				    					
	<h:outputText for="avaliacao-alongamento" value="  Flexibilidade : "/>
	<p:inputText 
		    	id="avaliacao-alongamento"
		    	required="true"
		    	size="5"
		    	value="#{avaliacaoBean.avaliacao.alongamento}"/>
	    		  			
	</h:panelGroup><!-- FIM PANEL GROUP -->
	    
	<!-- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -->
	    
	<br/>
	    
	<h:panelGrid columns="4" columnClasses="colunaEsquerda,colunaCentro"><!-- INICIO -->
		 
	<br/>
		    						
	<h:outputLabel value="DIREITA"/>	
		    
	<p:column></p:column>
	    		
	<h:outputLabel value="ESQUERDA"/>
	    						
	<h:outputText for="avaliacao-cmd" value="Coxa Média:"/>
	<p:inputText 
	    			id="avaliacao-cmd"
	    			required="true"
	    			size="5"
	   			value="#{avaliacaoBean.avaliacao.coxa_media_direita}"/>
			    			
	<p:column></p:column>
			    
	<p:inputText 
	    			id="avaliacao-cme"
	    			required="true"
	    			size="5"
	    			value="#{avaliacaoBean.avaliacao.coxa_media_esquerda}"/>	 	
			    					
	 <h:outputText for="avaliacao-pd" value="Panturrilha:" />
	 <p:inputText 
	    			id="avaliacao-pd"
	    			required="true"
	    			size="5"
	    			value="#{avaliacaoBean.avaliacao.panturrilha_direita}"/>
	    							
	 <p:column></p:column>	
	    		
	 <p:inputText 
	  			id="avaliacao-pe"
	  			required="true"
	  			size="5"
	 			value="#{avaliacaoBean.avaliacao.panturrilha_esquerda}"/>
	    							 
	<h:outputText value="Quadril:"/>
	<p:inputText 
	    			required="true"
	    			size="5"
	    			value="#{avaliacaoBean.avaliacao.quadril}"/>
			
	<p:column></p:column>		 	
	<p:column></p:column>
			    							 		
	<h:outputText for="avaliacao-cintura" value="Cintura:"/>
	<p:inputText 
	    			id="avaliacao-cintura"
	    			required="true"
	    			size="5"
	   			value="#{avaliacaoBean.avaliacao.cintura}"/>
			    			
	<p:column></p:column>
	<p:column></p:column>
			    					
	<h:outputText for="avaliacao-tb" value="Torax Busto:"/>
	<p:inputText 
	    			id="avaliacao-tb"
	    			required="true"
	    			size="5"
	    			value="#{avaliacaoBean.avaliacao.torax}"/>
			    				
	<p:column></p:column>
	<p:column></p:column>
			    					
	<h:outputText for="avaliacao-ad" value="Antebraço:"/>
	<p:inputText 
	    			id="avaliacao-ad"
	    			required="true"
	    			size="5"
	    			value="#{avaliacaoBean.avaliacao.antebraco_direito}"/>
			    					
	<p:column></p:column>
			
	<p:inputText 
	    			id="avaliacao-ae"
	    			required="true"
	    			size="5"
	    			value="#{avaliacaoBean.avaliacao.antebraco_esquerda}"/>
			    					
	<h:outputText for="avaliacao-brd" value="Braço Relaxado:"/>
	<p:inputText 
	    			id="avaliacao-brd"
	   			required="true"
	   			size="5"
	   			value="#{avaliacaoBean.avaliacao.braco_relaxado_direita}"/>
			    					
	<p:column></p:column>
	<p:inputText 
	   			id="avaliacao-bre"
	   			required="true"
	   			size="5"
	 			value="#{avaliacaoBean.avaliacao.braco_relaxado_esquerda}"/>
			    							 	
	<h:outputText for="avaliacao-bcd" value="Braço Contraido:"/>
	<p:inputText 
	   			id="avaliacao-bcd"
	   			required="true"
	   			size="5"
	   			value="#{avaliacaoBean.avaliacao.braco_contraido_direita}"/>
			    					
	<p:column></p:column>
	<p:inputText 
	  			id="avaliacao-bce"
	   			required="true"
	   			size="5"
	   			value="#{avaliacaoBean.avaliacao.braco_contraido_esquerda}">
	<p:ajax event="blur" update="tPerimetri" listener="#{avaliacaoBean.perimetria}"/>		
	</p:inputText>		
		    					
	<h:outputText value="Total Perimetria: " rendered="#{not empty avaliacaoBean.avaliacao.medidasTotais_Perimetria}"/>
	<h:outputText value="#{avaliacaoBean.avaliacao.medidasTotais_Perimetria}" id="tPerimetri"/>		 			 			 			 	
					    							 				 	
</h:panelGrid>

11 Respostas

Hebert_Coelho

Agora posta o erro. [=

Diego_Adriano
Mai 15, 2012 5:31:09 PM com.sun.faces.lifecycle.InvokeApplicationPhase execute
Advertência: /pages/teste.xhtml @154,90 listener="#{avaliacaoBean.perimetria}": java.lang.NullPointerException
javax.el.ELException: /pages/teste.xhtml @154,90 listener="#{avaliacaoBean.perimetria}": java.lang.NullPointerException
	at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:111)
	at org.primefaces.component.behavior.ajax.AjaxBehaviorListenerImpl.processAjaxBehavior(AjaxBehaviorListenerImpl.java:42)
	at javax.faces.event.AjaxBehaviorEvent.processListener(AjaxBehaviorEvent.java:113)
	at javax.faces.component.behavior.BehaviorBase.broadcast(BehaviorBase.java:102)
	at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:760)
	at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)
	at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)
	at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at br.com.treino.filter.ControleFiltro.doFilter(ControleFiltro.java:33)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:579)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:309)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
	at java.lang.Thread.run(Thread.java:722)
Caused by: java.lang.NullPointerException
	at br.com.treino.util.Calculos.somaPerimetria(Calculos.java:24)
	at br.com.treino.bean.AvaliacaoBean.perimetria(AvaliacaoBean.java:53)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:601)
	at org.apache.el.parser.AstValue.invoke(AstValue.java:262)
	at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278)
	at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
	... 29 more

CALCULO TOTAL
Hebert_Coelho

Oq você tem nessa linha?
at br.com.treino.util.Calculos.somaPerimetria(Calculos.java:24)

Diego_Adriano

Acho que é a linha onde há a chamada do método

somaPerimetria(Avaliacao avaliacao)
A

debuga teu código e coloca um break point nos teus 2 métodos, tanto no somaPerimetria(Avaliacao avaliacao) quanto no perimetria() e da uma olhada em que momento ele está recebendo um parâmetro nulo e posta aí

Diego_Adriano

O Null acontece nesse ponto:

avaliacao.setTatalDobras_Cutaneas(calculos.somaPerimetria(avaliacao));

Que é quando chamo o método pra efetuar a soma dos dados, ou seja os dados estão vindo nulos da tela, porém não deveria … certo ?
Já tentei alocar esse cálculo em uma outra variável para depois seta-la no Total de Dobras, mas o erro é o mesmo.

A

Qual valor está retido na variável avaliação? Tenta rodar um teste com esse mesmo método dentro da sua classe. Cria um main e tenta realizar esas função antes de tentar passa-la para a sua view, assim, se funcionar na classe, vai funcionar na página, contando que os valore sejam do mesmo tipo.

Diego_Adriano

então cara, essa Avaliação é a representação da minha classe “Avaliação” ou seja, tenho diversas informações, o erro é no momento onde acesso esse objeto e tento efetuar os cálculos.

A

Então o erro está dentro de avaliação ao receber algum atributo correto? Essa avaliação é um bean Entidade? em qual atributo ele ta dando erro ao ser acessado? Tem que cavucar até encontrar a fonte do erro

Diego_Adriano

Então, olha só a estrutura:
Entity:

public class Avaliacao implements Serializable {
        
        //PERIMETRIA
	private Double coxa_media_direita;
	private Double coxa_media_esquerda;
	private Double panturrilha_direita;
	private Double panturrilha_esquerda;
	private Double quadril;
	private Double cintura;
	private Double torax;
	private Double antebraco_direito;
	private Double antebraco_esquerda;
	private Double braco_relaxado_direita;
	private Double braco_relaxado_esquerda;
	private Double braco_contraido_direita;
	private Double braco_contraido_esquerda;
	private Double medidasTotais_Perimetria;
	
	//DOBRAS CUTÂNEAS
	private Double subescapular;
	private Double triceps;
	private Double suprailiaca;
	private Double abdominal;
	private Double panturrilha;
	private Double biceps;
	private Double peitoral;
	private Double axila_media;
	private Double coxa_medial;
	private Double tatalDobras_Cutaneas;

Bean

@ManagedBean
@ViewScoped
public class AvaliacaoBean implements Serializable{
	
	private EntityManager entityManager;
	private Cliente cliente;
	private Cliente clienteSelecionado;
	private Avaliacao avaliacao;
	private Avaliacao avaliacaoSelecionada;
	private QuestionarioAvaliacao questionario;
	private List<Cliente> clientesAtivos;
	private List<Avaliacao> avaliacoes;
	private int idadeCliente;
	
	public AvaliacaoBean() {
		cliente = new Cliente();
		avaliacao = new Avaliacao();
		questionario = new QuestionarioAvaliacao();
		clientesAtivos = new ArrayList<Cliente>();
		avaliacoes = new ArrayList<Avaliacao>();
	}
	/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
												//CALCULOS
	/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
	public Double dobrascutaneas(Avaliacao avaliacao){
		
		Calculos calculos = new Calculos();
		return calculos.somaCutanea(avaliacao);
		
	}
	public void perimetria(){
		
		Calculos calculos = new Calculos();
		avaliacao.setTatalDobras_Cutaneas(calculos.somaPerimetria(avaliacao));
		
	}

View: Coloquei só o ponto onde realizo a chamada Ajax

<p:inputText 
 		id="avaliacao-bce"
		required="true"
		size="5"
		value="#{avaliacaoBean.avaliacao.braco_contraido_esquerda}">
	<p:ajax event="blur" update="tPerimetri" listener="#{avaliacaoBean.perimetria}"/>		
 </p:inputText>		
			    					
<h:outputText value="Total Perimetria: " rendered="#{not empty avaliacaoBean.avaliacao.medidasTotais_Perimetria}"/>
<h:outputText value="#{avaliacaoBean.avaliacao.medidasTotais_Perimetria}" id="tPerimetri"/>
Diego_Adriano

Bão, depois de alguns, na verdade muitos testes encontrei o erro, simples, mas não sei o pq dele dar esse erro, estou tentando usar facelets … então eu chamo determinada parte da pagina com include

<ui:include src="/pages/avaliacao/cutanias.xhtml"/>

Porém meu Objeto ficava sempre Null

Então resolvi tirar o Include e deixar os dados em uma Pag só, em um Form só … e pra surpresa os valores vieram preenchidos a partir daí, agora, onde esta o problema ? Não posso realmente trabalhar dessa forma ?

Criado 15 de maio de 2012
Ultima resposta 4 de jun. de 2012
Respostas 11
Participantes 3