estou implementado a famosa “agenda de contatos”, mas agora com o vraptor; todos os jars ja estao no devido build path; mas quando eu tento acessar a url:
http://localhost:8080/agendaRaptor/contatos/formulario.jsp
meus jsps estao no local WEB-INF/jsp/contatos/formulario.jsp
tomo um 404 direto… mas ao meu ver, esta tudo certo, aqui vao as classes;
package com.agenda.modelo;
import java.util.Calendar;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class Contato {
@Id
@GeneratedValue
private String id;
private String nome;
private String email;
private String endereco;
private Calendar dataNascimento;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getEndereco() {
return endereco;
}
public void setEndereco(String endereco) {
this.endereco = endereco;
}
public Calendar getDataNascimento() {
return dataNascimento;
}
public void setDataNascimento(Calendar dataNascimento) {
this.dataNascimento = dataNascimento;
}
}
[code]<!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.dtd”>
<%@ taglib tagdir="/WEB-INF/tags" prefix=“caelum” %>
<%@ taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c” %>
<html>
<head>
<meta http-equiv=“Content-Type” content=“text/html; charset=ISO-8859-1”>
<title>Adicione um Contato na Pagina</title>
<style type=“text/css”>
body {
background-color:#00B2EE;
h2-color:#363636;
font-family: Verdana;
}
</style>
</head>
<body>
<c:import url=“cabecalho.jsp”></c:import>
<h2>Adicione Seu Contato no Banco de Dados : </h2>
<form action=“adiciona”>
Nome: <input id=“nome” type=“text” name=“contato.nome” value="${contato.nome}">
E-mail: <input id=“email” type=“text” name=“contato.email” value="${contato.email}">
Endereço: <input id=“endereco” type=“text” name=“contato.endereco” value="${contato.endereco}">
Data de Nascimento: <caelum:campoData id=“dataNascimento”/>
<input type=“submit” value=“Gravar”>
</form>
<hr>
<c:import url=“rodape.jsp”></c:import>
</body>
</html>
package com.agenda.dao;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.Transaction;
import br.com.caelum.vraptor.ioc.Component;
import com.agenda.modelo.Contato;
@Component
public class ContatoDAO {
private final Session session;
public ContatoDAO(Session session) {
this.session = session;
}
public void adiciona(Contato contato) {
Transaction tx = session.beginTransaction();
session.save(contato);
tx.commit();
}
public void exclui(Contato contato) {
Transaction tx = session.beginTransaction();
session.delete(contato);
tx.commit();
}
public void atualiza(Contato contato) {
Transaction tx = session.beginTransaction();
session.update(contato);
tx.commit();
}
@SuppressWarnings("unchecked")
public List<Contato> listaTudo() {
return this.session.createCriteria(Contato.class).list();
}
public Contato carrega(Long id) {
return (Contato) this.session.load(Contato.class, id);
}
}
[/code]
package com.agenda.controller;
import java.util.List;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import com.agenda.dao.ContatoDAO;
import com.agenda.modelo.Contato;
@Resource
public class ContatosController {
private final ContatoDAO dao;
private final Result result;
public ContatosController(ContatoDAO dao, Result result) {
this.dao = dao;
this.result = result;
}
public void adiciona(Contato contato) {
dao.adiciona(contato);
result.redirectTo(this).lista();
}
public void exclui(Long id) {
Contato contato = dao.carrega(id);
dao.exclui(contato);
result.redirectTo(this).lista();
}
public void atualiza(Contato contato) {
dao.exclui(contato);
result.redirectTo(this).lista();
}
public List<Contato> lista() {
return dao.listaTudo();
}
public void formulario(){}
}
package com.agenda.infra;
import javax.annotation.PostConstruct;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import br.com.caelum.vraptor.ioc.Component;
import br.com.caelum.vraptor.ioc.ComponentFactory;
@Component
public class CriadorDeSession implements ComponentFactory<Session> {
private SessionFactory factory;
private Session session;
public CriadorDeSession(SessionFactory factory){
this.factory = factory;
}
@PostConstruct
public void abre(){
this.session = factory.openSession();
System.out.println("Metodo -abre- Session");
}
@Override
public Session getInstance() {
System.out.println("Metodo -getInstance- Session");
return this.session;
}
public void fecha(){
this.session.close();
System.out.println("Metodo -fecha- Session");
}
}
package com.agenda.infra;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import br.com.caelum.vraptor.ioc.ApplicationScoped;
import br.com.caelum.vraptor.ioc.Component;
import br.com.caelum.vraptor.ioc.ComponentFactory;
@Component
@ApplicationScoped
public class CriadorDeSessionFactory implements ComponentFactory<SessionFactory> {
private SessionFactory factory;
@PostConstruct
public void abre(){
AnnotationConfiguration configuration = new AnnotationConfiguration();
configuration.configure();
this.factory = configuration.buildSessionFactory();
System.out.println("Metodo -abre- SessionFactory");
}
@Override
public SessionFactory getInstance() {
System.out.println("Metodo -getInstance- SessionFactory");
return this.factory;
}
@PreDestroy
public void fecha(){
this.factory.close();
System.out.println("Metodo -fecha- SessionFactory");
}
}
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib tagdir="/WEB-INF/tags" prefix="caelum" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Adicione um Contato na Pagina</title>
<style type="text/css">
body {
background-color:#00B2EE;
h2-color:#363636;
font-family: Verdana;
}
</style>
</head>
<body>
<c:import url="cabecalho.jsp"></c:import>
<h2>Adicione Seu Contato no Banco de Dados : </h2>
<form action="adiciona">
Nome: <input id="nome" type="text" name="contato.nome" value="${contato.nome}"> <br>
E-mail: <input id="email" type="text" name="contato.email" value="${contato.email}"> <br>
Endereço: <input id="endereco" type="text" name="contato.endereco" value="${contato.endereco}"> <br>
Data de Nascimento: <caelum:campoData id="dataNascimento"/> <br>
<input type="submit" value="Gravar">
</form>
<hr>
<c:import url="rodape.jsp"></c:import>
</body>
</html>