Bom dia pessoal.
Estou com um problema em um projeto que estou desenvolvendo para a instituição pela qual eu trabalho, e estou apanhando nisso e não estou conseguindo resolver.
O problema é o seguinte.
Criei um projeto todo utilizando hibernate, vraptor, e talz, e utilizei o Design DAO para a construção do projeto, bem vamos la ao que interessa.
como vou colocar abaixo, nos meus códigos, existe uma pagina jsp, que se chama, procurar.ok.jps, e essa pagina tem um campo para o usuario digitar o nome que deseja procurar, que por sinal, essa pagina possui um formulario com um action para titulacao.procuranome.logic, cujo esse procuranome, esta dentro do meu titulacao.logic, e configure no meu views.properties, quando essa logica foi valida, ele vai me redirecionar para o titulacao.listatitulacao.logic. que vai me listar os nomes encontrados.
Ai esta o grande problema., quando eu faço para procurar por uma string, ele me acusa um erro
javax.servlet.ServletException: Provided id of the wrong type for class br.edu.fsj.registrodediplomas.modelo.Titulacao. Expected: class java.lang.Long, got class java.lang.String
org.vraptor.http.DefaultDispatcher.dispatch(DefaultDispatcher.java:69)
org.vraptor.VRaptorServlet.service(VRaptorServlet.java:48)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
e quando eu utilizo uma logica para procurar pelo id, ele funciona.
Ai galera se puderem ajudar, desde ja agradeço, atenciosamente.
João Victor.
CODIGOS:
Titulacao.java
[code]package br.edu.fsj.registrodediplomas.modelo;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class Titulacao {
@Id
@GeneratedValue
private Long id;
private String nome;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
}[/code]
Dao.java
package br.edu.fsj.registrodediplomas.dao;
import java.util.List;
import org.hibernate.Session;
public class Dao<T> {
private Session session;
private final Class classe;
public Dao(Session session, Class classe) {
this.session =session;
this.classe=classe;
}
public void adiciona(T u){
this.session.save(u);
}
public void remove(T u){
this.session.delete(u);
}
public void atualiza (T u){
this.session.merge(u);
}
public List<T> listaTudo(){
return this.session.createCriteria(this.classe).list();
}
public T procuranome(String nome) {
return (T) session.load(this.classe, nome);
}
public T procura(Long id) {
return (T) session.load(this.classe, id);
}
protected Session getSession(){
return session;
}
}
DaoFactory.java
package br.edu.fsj.registrodediplomas.dao;
import org.hibernate.Session;
import org.hibernate.Transaction;
import br.edu.fsj.registrodediplomas.modelo.Aluno;
import br.edu.fsj.registrodediplomas.modelo.Curso;
import br.edu.fsj.registrodediplomas.modelo.Formasdeingresso;
import br.edu.fsj.registrodediplomas.modelo.Habilitacao;
import br.edu.fsj.registrodediplomas.modelo.Nacionalidade;
import br.edu.fsj.registrodediplomas.modelo.Naturalidade;
import br.edu.fsj.registrodediplomas.modelo.Processosrd;
import br.edu.fsj.registrodediplomas.modelo.Titulacao;
import br.edu.fsj.registrodediplomas.modelo.Usuario;
import br.edu.fsj.registrodediplomas.util.HibernateUtil;
public class DaoFactory {
private final Session session;
private Transaction transaction;
public DaoFactory() {
session = HibernateUtil.getSession();
}
public void beginTransaction() {
this.transaction = this.session.beginTransaction();
}
public void comit() {
this.transaction.commit();
this.transaction = null;
}
public boolean hasTransaction() {
return this.transaction != null;
}
public void rollback() {
this.transaction.rollback();
this.transaction = null;
}
public void close() {
this.session.close();
}
/*public Dao getUsuarioDao() {
return new UsuarioDao(this.session);
}*/
public Dao<Usuario> getUsuarioDao() {
return new UsuarioDao(this.session);
}
public Dao<Aluno> getAlunoDao() {
return new Dao<Aluno>(this.session, Aluno.class);
}
public Dao<Curso> getCursoDao() {
return new Dao<Curso>(this.session, Curso.class);
}
public Dao<Formasdeingresso> getFormasdeingressoDao() {
return new Dao<Formasdeingresso>(this.session, Formasdeingresso.class);
}
public Dao<Habilitacao> getHabilitacaoDao() {
return new Dao<Habilitacao>(this.session, Habilitacao.class);
}
public Dao<Titulacao> getTitulacaoDao() {
return new Dao<Titulacao>(this.session, Titulacao.class);
}
public Dao<Processosrd> getProcessoSRDDao() {
return new Dao<Processosrd>(this.session, Processosrd.class);
}
public Dao<Naturalidade> getNaturalidadeDao() {
return new Dao<Naturalidade>(this.session, Naturalidade.class);
}
public Dao<Nacionalidade> getNacionalidadeDao() {
return new Dao<Nacionalidade>(this.session, Nacionalidade.class);
}
}
DaoInterceptor.java
package br.edu.fsj.registrodediplomas.registro;
import org.vraptor.Interceptor;
import org.vraptor.LogicException;
import org.vraptor.LogicFlow;
import org.vraptor.annotations.Out;
import org.vraptor.view.ViewException;
import br.edu.fsj.registrodediplomas.dao.DaoFactory;
public class DaoInterceptor implements Interceptor{
private final DaoFactory factory = new DaoFactory();
public void intercept(LogicFlow flow) throws LogicException, ViewException {
//executa a logica
flow.execute();
//se sobrou transsacao sem comitar faz rollback
if (factory.hasTransaction()){
factory.rollback();
}
factory.close();
}
@Out(key="br.edu.fsj.registrodediplomas.dao.DaoFactory")
public DaoFactory getFactory(){
return factory;
}
}
procurar.ok.jsp
<%@page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %>
<h1>Cadastro de Habilitacoes</h1>
<form action="titulacao.procuranome.logic" method="post">
Nome:
<input type="text" name="titulacao.nome" value="${titulacao.nome}"/>
<input type="submit"/>
</form>
listatitulacao.ok.jsp
<%@page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<body>
teste
<display:table id="titulacao" name="${titulacao}" requestURI="titulacao.listatitulacao.logic">
<display:column property="id" />
<display:column property="nome" sortable="true" />
</display:table>
</body>
</html>
</display:table>
TitulacaoLogic.java
package br.edu.fsj.registrodediplomas.logic;
import java.util.List;
import org.vraptor.annotations.Component;
import org.vraptor.annotations.InterceptedBy;
import br.edu.fsj.registrodediplomas.dao.DaoFactory;
import br.edu.fsj.registrodediplomas.modelo.Titulacao;
import br.edu.fsj.registrodediplomas.registro.DaoInterceptor;
@Component("titulacao")
@InterceptedBy(DaoInterceptor.class)
public class TitulacaoLogic {
private final DaoFactory daoFactory;
private Titulacao titulacao;
private List<Titulacao> titulacoes;
public TitulacaoLogic(DaoFactory daoFactory) {
this.daoFactory = daoFactory;
}
// formulario para adicao
public void formulario() {
}
public void procurar() {
}
// formulario para edicao
public void editar(Titulacao titulacao) {
// carrega os dados no banco para edicao
this.titulacao = this.daoFactory.getTitulacaoDao().procura(titulacao.getId());
}
// Adiciona uma titulacao novo ou atualiza se for edicao
public void armazena(Titulacao titulacao) {
this.daoFactory.beginTransaction();
this.daoFactory.getTitulacaoDao().atualiza(titulacao);
this.daoFactory.comit();
}
// remove uma titulacao
public void remove(Titulacao titulacao) {
this.daoFactory.beginTransaction();
this.daoFactory.getTitulacaoDao().remove(titulacao);
this.daoFactory.comit();
}
// lista todos as titulacoes
public void lista() {
this.titulacoes = this.daoFactory.getTitulacaoDao().listaTudo();
}
// getter pra titulacao
public Titulacao getTitulacao() {
return titulacao;
}
// getter pra lista de titulacoes
public List<Titulacao> getTitulacoes() {
return titulacoes;
}
public void procuranome(Titulacao titulacao) {
this.titulacao = this.daoFactory.getTitulacaoDao().procuranome(titulacao.getNome());
}
// lista todos as titulacoes
public void listatitulacao() {
this.titulacoes = this.daoFactory.getTitulacaoDao().listaTudo();
}
}