PArametro retornando null

Bom dia…

Estou com um problema na minha aplicação. Sou novo em programação, então as vezes fico um pouco perdido… Tenho um controller que pega o ID de um item como referencia e me joga pra um outro formulario, que vai adicionar dados em uma tabela filha. O objeto chega até o formulário, mas quando eu salvo, ele vem nulo… alguém poderia me dar uma luz… segue abaixo meus códigos.

Controller da tabela Pai

import static br.com.caelum.vraptor.view.Results.page;

import java.util.GregorianCalendar;
import java.util.List;

import br.com.caelum.vraptor.Delete;
import br.com.caelum.vraptor.Get;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Put;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.Validator;
import br.com.caelum.vraptor.validator.Validations;


import br.com.metha.registroDiario.dao.TempoDiarioDAO;
import br.com.metha.registroDiario.modelo.Colaborador;
import br.com.metha.registroDiario.modelo.TempoDiario;

@Resource
public class TemposDiariosController {

	private final TempoDiarioDAO dao;
	private final Result result;
	private final Validator validator;
	
	public TemposDiariosController(TempoDiarioDAO dao, Result result, Validator validator){
		this.dao = dao;
		this.result = result;
		this.validator = validator;
	}
	
	public List<TempoDiario> lista(final TempoDiario tempoDiario){
		Colaborador colaborador = new Colaborador();
		colaborador.setId(999);
		
				
		return dao.listaTudo(tempoDiario);
	}
	@Post @Path("/temposDiarios")
	public void adiciona(final TempoDiario tempoDiario){

		tempoDiario.setUltimaAtualizacao(new GregorianCalendar().getTime());
		tempoDiario.setColaborador(999);
		
		Colaborador colaborador = new Colaborador();
		colaborador.setId(999);
		tempoDiario.setCodColaborador(colaborador);
		tempoDiario.setCodDia(1.0);
		tempoDiario.setDataInclusao(new GregorianCalendar().getTime());
		tempoDiario.setResponsavelInclusao(999);
		tempoDiario.setSaldo(tempoDiario.calcularSaldo());
		tempoDiario.setTotal(tempoDiario.getTempoTrabalhado());
		
		validator.checking(new Validations(){{
			that(tempoDiario.getEntrada1().length() == 4 || tempoDiario.getEntrada1().length() == 0,
			"Entrada 1","entrada1.obrigatorio");
			that(tempoDiario.getEntrada2().length() == 4 || tempoDiario.getEntrada2().length() == 0,
			"Entrada 2","entrada2.obrigatorio");
			that(tempoDiario.getEntrada3().length() == 4 || tempoDiario.getEntrada3().length() == 0,
			"Entrada 3","entrada3.obrigatorio");
			that(tempoDiario.getSaida1().length() == 4 || tempoDiario.getSaida1().length() == 0,
			"Saida 1","saida1.obrigatorio");
			that(tempoDiario.getSaida2().length() == 4 || tempoDiario.getSaida2().length() == 0, 
			"Saida 2","saida2.obrigatorio");
			that(tempoDiario.getSaida3().length() == 4 || tempoDiario.getSaida3().length() == 0,
			"Saida 3","saida3.obrigatorio");
			}});
		validator.onErrorUse(page()).of(TemposDiariosController.class).formulario(); 
				
		dao.salva(tempoDiario);
		result.redirectTo(TemposDiariosController.class).adicionado();
	}
	public void adicionado(){
		
	}
	
	public void formulario(){
		
	}
	public void buscador(){
		
	}
	
	@Get @Path("/temposDiarios/{id}")
	public TempoDiario visualiza(Integer id){
		return dao.carrega(id);
		
	}
	
	//@Put @Path("/temposDiarios/{tempoDiario.id}")
	//public void altera(TempoDiario tempoDiario){
		

		//tempoDiario.setColaborador(999);
	
		//dao.atualiza(tempoDiario);
		//result.redirectTo(TemposDiariosController.class).lista(tempoDiario);
	//}
	
	//@Get @Path("/temposDiarios/{id}")
	//public TempoDiario edita(Integer id){
	//	return dao.carrega(id);
	//}
	
	@Delete @Path("/temposDiarios/{id}")
	public void remove(Integer id){
		TempoDiario tempoDiario = dao.carrega(id);
		dao.remove(tempoDiario);
		result.redirectTo(TemposDiariosController.class).lista(tempoDiario);
		System.out.println(id);
	}
	@Get @Path("/temposDiarios/{id}/cadastraAtividade")
	public void cadastraAtividade(Integer id){
		TempoDiario tempoDiario = dao.carrega(id);
		result.redirectTo(AtividadesDiariasController.class).formulario(tempoDiario);
		System.out.println(id);
	}


	public List<TempoDiario> buscaRD(Integer colaborador){
		
		return  dao.buscaRD(colaborador);
}
}

Controller da Tabela Filha

import java.util.GregorianCalendar;
import java.util.List;

import org.hibernate.Session;

import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.metha.registroDiario.dao.AtividadeDAO;
import br.com.metha.registroDiario.dao.AtividadeDiariaDAO;
import br.com.metha.registroDiario.dao.ClienteDAO;
import br.com.metha.registroDiario.dao.SistemaDAO;
import br.com.metha.registroDiario.modelo.Atividade;
import br.com.metha.registroDiario.modelo.AtividadeDiaria;
import br.com.metha.registroDiario.modelo.Cliente;
import br.com.metha.registroDiario.modelo.Colaborador;
import br.com.metha.registroDiario.modelo.Sistema;
import br.com.metha.registroDiario.modelo.TempoDiario;

@Resource
public class AtividadesDiariasController {

	
	
	private final AtividadeDAO atividade;
	private final SistemaDAO sistema;
	private final ClienteDAO cliente;
	private final AtividadeDiariaDAO dao;
	private final Result result;
	
	public AtividadesDiariasController(AtividadeDiariaDAO dao, Result result, AtividadeDAO atividade, SistemaDAO sistema, ClienteDAO cliente){
		this.dao = dao;
		this.result = result;
		this.atividade = atividade;
		this.cliente = cliente;
		this.sistema = sistema;
	}
	
	public List<AtividadeDiaria> lista(){
		
		return dao.listaTudo();
	}
	
	@Post @Path("/atividadesDiarias")
	public void adiciona(final AtividadeDiaria atividadeDiaria){
		
		System.out.println();
		System.out.println(atividadeDiaria);

		atividadeDiaria.setUltimaAtualizacao(new GregorianCalendar().getTime());
		Colaborador colaborador = new Colaborador();
		colaborador.setId(999);
		atividadeDiaria.setColaborador(999);
		atividadeDiaria.setCodColaborador(colaborador);
		atividadeDiaria.setDataInclusao(new GregorianCalendar().getTime());
		atividadeDiaria.setAno(atividadeDiaria.getRd().getAno());
		atividadeDiaria.setMes(atividadeDiaria.getRd().getMes());
		atividadeDiaria.setDia(atividadeDiaria.getRd().getDia());
		dao.salva(atividadeDiaria);
		result.redirectTo(AtividadesDiariasController.class).adicionado();
	}
	
	public void adicionado(){
		
	}
	
	
	public void formulario(TempoDiario tempoDiario){
		
	
		
		result.include("atividade", atividade.listaTudo());
		result.include("sistema", sistema.listaTudo());
		result.include("cliente", cliente.listaTudo());
		
	}
	
	
	public void altera(AtividadeDiaria atividade){
		

		atividade.setColaborador(999);
	
		dao.atualiza(atividade);
		result.redirectTo(AtividadesDiariasController.class).lista();
	}
	
	public AtividadeDiaria edita(Integer id){
		return dao.carrega(id);
	}
	
	
	public void remove(Integer id){
		AtividadeDiaria atividade = dao.carrega(id);
		dao.remove(atividade);
		result.redirectTo(AtividadesController.class).lista();
		System.out.println(id);
	}

}

Jsp do formulário

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@page contentType="text/html" pageEncoding="ISO-8859-1"%>

<form action="<c:url value="/atividadesDiarias"/>" method="POST">



	<label>${tempoDiario.ano}</label>
	<fieldset>
		<legend>Cadastrar Atividade</legend>
		<select name="atividadeDiaria.atividade.codigo">   
			<option value="">--Setor--</option> 
  				<c:forEach var="atividade" items="${atividade}">   
   				 <option value="${atividadeDiaria.codAtividade}">${atividade.codigo}-${atividade.descricao}</option>   
  				</c:forEach>   
		</select>
			<select name="atividadeDiara.sistema.codigo">  
				<option value="">--Sistema--</option>  
  				<c:forEach var="sistema" items="${sistema}">   
   				 <option value="${atividadeDiaria.codSistema}">${sistema.codigo}-${sistema.descricao}</option>   
  				</c:forEach>   
		</select>
		<select name="atividadeDiaria.cliente.codigo">  
			<option value="">--Cliente--</option>  
  				<c:forEach var="cliente" items="${cliente}">   
   				 <option value="${atividadeDiaria.codCliente}">${cliente.codigo}-${cliente.descricao}</option>   
  				</c:forEach>   
		</select>
		<table>
			<thead>
			<tr>
				<th>Tempo Gasto</th>
			</tr>
			</thead>
			<tbody>
				<tr>
					<td><label for="tempoGasto"></label>
					<input id="tempoGasto" type="text" name="atividadeDiaria.tempoGasto" value="${atividadeDiaria.tempoGasto}" maxlength="4"/>
					</td>
				</tr>
			</tbody>
		
		</table>
			<button type="submit">Salvar</button>
	</fieldset>
</form>

Erro:

13/04/2010 11:24:17 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet default threw exception
br.com.caelum.vraptor.InterceptionException: an exception was raised while executing resource method
	at br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:86)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
	at br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:77)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
	at br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:42)
	at br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:47)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
	at br.com.caelum.vraptor.interceptor.InterceptorListPriorToExecutionExtractor.intercept(InterceptorListPriorToExecutionExtractor.java:46)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
	at br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:80)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
	at br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:67)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
	at br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:70)
	at br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:92)
	at br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:56)
	at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:89)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
	at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NullPointerException
	at br.com.metha.registroDiario.controller.AtividadesDiariasController.adiciona(AtividadesDiariasController.java:58)
	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 br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:57)
	... 37 more

Obrigado desde já.

Cara depura passo a passo para saber exatamente o que está nulo! A princípio ele está dizendo que há algum objeto nulo e você está tentando usá-lo

Caused by: java.lang.NullPointerException
at br.com.metha.registroDiario.controller.AtividadesDiariasController.adiciona(AtividadesDiariasController.java:58)

o que tem na linha 58 do arquivo AtividadesDiariasController.java???

Então, o que está voltando Null é o meu TempoDiario. É exatamento o meu objeto referente a tabela Pai.

O nullPointerException acontece exatamente quando eu tenho pegar os dados desse objeto TempoDiario, ou seja, na tabela pai.

o nullPointer é nessa linha?

atividadeDiaria.setAno(atividadeDiaria.getRd().getAno());  

se sim, esse getRd() está vindo null… e vc disse q esse Rd é um tempo diário, certo?

esse campo vem nulll pq vc em nenhum campo do formulário está dizendo qual é o rd… (teria que ter algum input,select,etc com name=“atividadeDiaria.rd.id” ou algo do tipo)

Valeu Lucas,

deu uma boa ajuda aqui!!