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á.