Tenho uma lista de produtos, e gostaria de colocar ela disponivel em todas as páginas.
Como faço isso utilizando o interceptor do vraptor.
Grato.
@Get("/produtos")
public List<Produto> lista() {
return dao.listaTudo();
}
Tenho uma lista de produtos, e gostaria de colocar ela disponivel em todas as páginas.
Como faço isso utilizando o interceptor do vraptor.
Grato.
@Get("/produtos")
public List<Produto> lista() {
return dao.listaTudo();
}
Lembra que eu te expliquei isso no outro tópico?
http://www.guj.com.br/java/281565-resultado-de-lista-em-varias-paginas#post_text_1484749
Você precisa fazer isso dentro do interceptor:
Ops!
Não funcionou!!!
Curte so como ficou meu interceptor.
package br.com.caelum.goodbuy.infra;
import org.hibernate.Session;
import br.com.caelum.goodbuy.controller.UsuariosController;
import br.com.caelum.goodbuy.modelo.UsuarioWeb;
import br.com.caelum.goodby.dao.SistemasDAO;
import br.com.caelum.vraptor.Get;
import br.com.caelum.vraptor.InterceptionException;
import br.com.caelum.vraptor.Intercepts;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.core.InterceptorStack;
import br.com.caelum.vraptor.interceptor.Interceptor;
import br.com.caelum.vraptor.resource.ResourceMethod;
@Intercepts
public class AutorizacaoInterceptor implements Interceptor{
private final UsuarioWeb usuario;
private final Result result;
private final Session session;
private final SistemasDAO dao;
public AutorizacaoInterceptor(UsuarioWeb usuario, Result result, Session session,
SistemasDAO dao) {
this.usuario = usuario;
this.result = result;
this.session = session;
this.dao = dao;
}
public boolean accepts(ResourceMethod method) {
return !usuario.isLogado() && method.containsAnnotation(Restrito.class);
}
public void intercept(InterceptorStack stack, ResourceMethod method,
Object resourceInstance) throws InterceptionException {
result.include("sistemas", dao.listaTudo());
result.redirectTo(UsuariosController.class).loginForm();
}
}
Minha classe SistemasDAO
package br.com.caelum.goodby.dao;
import java.util.List;
import org.hibernate.Hibernate;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Restrictions;
import br.com.caelum.goodbuy.modelo.Produto;
import br.com.caelum.goodbuy.modelo.Sistemas;
import br.com.caelum.vraptor.ioc.Component;
@Component
public class SistemasDAO {
private final Session session;
public SistemasDAO(Session session){
this.session = session;
}
public List<Sistemas> listaTudo() {
return this.session.createCriteria(Sistemas.class).list();
//Hibernate.initialize(sistemas.getModulos());
//Hibernate.initialize(sistemas.getRotinas());
}
public void salva(Sistemas sistemas) {
Transaction tx = session.beginTransaction();
session.save(sistemas);
tx.commit();
}
public Sistemas carrega(Long id) {
return (Sistemas) this.session.load(Sistemas.class, id);
}
public void atualiza(Sistemas sistemas) {
Transaction tx = session.beginTransaction();
this.session.update(sistemas);
tx.commit();
}
public void remove(Sistemas sistemas) {
Transaction tx = session.beginTransaction();
this.session.delete(sistemas);
tx.commit();
}
public List<Sistemas> busca(String nome) {
return session.createCriteria(Sistemas.class).add(Restrictions.ilike("nome", nome, MatchMode.ANYWHERE)).list();
}
public void recarrega(Sistemas sistemas) {
session.refresh(sistemas);
}
}
Na verdade você está juntando 2 interceptors em 1:
Ve ai e me fala.
Poww brother,
Valeu pela ajuda, mas ainda não está dando certo.
Poww desculpa, mas não consigo entender como funciona a questão do interceptor no vraptor.
Eu fiz assim, não deu certo.
public void intercept(InterceptorStack stack, ResourceMethod method,
Object resourceInstance) throws InterceptionException {
result.include("sistemas", dao.listaTudo());
result.redirectTo(UsuariosController.class).loginForm();
stack.next(method, resourceInstance);
}
Não cara, são 2 classes diferentes. Cada uma vai ser responsável por cada coisa. Não mistura, se não fica feio.
package br.com.caelum.goodbuy.infra;
import org.hibernate.Session;
import br.com.caelum.goodbuy.controller.UsuariosController;
import br.com.caelum.goodbuy.modelo.UsuarioWeb;
import br.com.caelum.goodby.dao.SistemasDAO;
import br.com.caelum.vraptor.Get;
import br.com.caelum.vraptor.InterceptionException;
import br.com.caelum.vraptor.Intercepts;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.core.InterceptorStack;
import br.com.caelum.vraptor.interceptor.Interceptor;
import br.com.caelum.vraptor.resource.ResourceMethod;
@Intercepts
public class AutorizacaoInterceptor implements Interceptor{ // Este interceptor serve SOMENTE para verificar se o usuário pode ou não acessar determinada action.
private final UsuarioWeb usuario;
private final Result result;
private final Session session;
private final SistemasDAO dao; // Sistemas faz parte da Autorização? Não! Então tira isso daqui.
public AutorizacaoInterceptor(UsuarioWeb usuario, Result result, Session session,
SistemasDAO dao) {
this.usuario = usuario;
this.result = result;
this.session = session;
this.dao = dao;
}
public boolean accepts(ResourceMethod method) {
return !usuario.isLogado() && method.containsAnnotation(Restrito.class);
}
public void intercept(InterceptorStack stack, ResourceMethod method,
Object resourceInstance) throws InterceptionException {
result.include("sistemas", dao.listaTudo()); // Incluir a listagem na tela faz parte de Autorização? Não! Então tira isso daqui.
result.redirectTo(UsuariosController.class).loginForm();
}
}
package br.com.caelum.goodbuy.infra;
// Imports...
@Intercepts
public class IncludesVariablesInViewInterceptor implements Interceptor{ // Este interceptor serve SOMENTE para setar as variáveis na tela.
private final Result result;
private final SistemasDAO dao;
public IncludesVariablesInViewInterceptor(Result result, SistemasDAO dao) {
this.result = result;
this.dao = dao;
}
public boolean accepts(ResourceMethod method) {
return true;// SEMPRE vai interceptar
}
public void intercept(InterceptorStack stack, ResourceMethod method,
Object resourceInstance) throws InterceptionException {
result.include("sistemas", dao.listaTudo()); // Inclui a listagem na view.
stack.next(resourceInstance); // Fala para o interceptor seguir seu curso normalmente.
}
}
Mano,
Desculpa ae, mas não funcionou novamente.
Putz.
Me explica o que você fez, me mostre as classes… Se deu erro, que erro deu?
Se você só me falar que não deu certo, eu assumo que você não fez nada.
Me mostra tudo o que você tentou fazer e o que você tentou fazer ALÉM do que eu disse aqui.
Eu vou te confessar que estou quase desistindo de utilizar o vraptor.
rsrs.
Vamos lá.
Eu tenho a classe sistemas.
@Entity
public class Sistemas {
@Id
@GeneratedValue
private long id;
private String nome;
private String ativo;
private String url;
private String imagem;
@OneToMany(mappedBy = "sistemas",targetEntity= Modulos.class,
fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private List<Modulos>modulos;
@OneToMany(mappedBy = "sistemas2",targetEntity= Rotinas.class,
fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private List<Rotinas>rotinas;
//Métodos get e set
@Resource
public class SistemasController {
private final SistemasDAO dao;
private final Result result;
private final Validator validator;
public SistemasController(SistemasDAO dao,Result result, Validator validator) {
this.dao = dao;
this.result = result;
this.validator = validator;
}
@Get("/sistemas")
@Restrito
public List<Sistemas> lista() {
return dao.listaTudo();
}
@Post("/sistemas")
@Restrito
public void adiciona(final Sistemas sistemas) {
dao.salva(sistemas);
result.redirectTo(this).lista();
}
@Get("/sistemas/novo")
@Restrito
public void formulario() {
}
@Get("/sistemas/{id}")
@Restrito
public Sistemas edita(Long id) {
return dao.carrega(id);
}
@Put("/sistemas/{sistemas.id}")
@Restrito
public void altera(final Sistemas sistemas) {
dao.atualiza(sistemas);
result.redirectTo(this).lista();
}
@Delete("/sistemas/{id}")
@Restrito
public void remove(Long id) {
Sistemas sistemas = dao.carrega(id);
dao.remove(sistemas);
result.redirectTo(this).lista();
}
@Restrito
public List<Sistemas> busca(String nome) {
result.include("nome", nome);
return dao.busca(nome);
}
@Get("/sistemas/busca.json")
@Restrito
public void buscaJson(String q) {
result.use(json()).withoutRoot()
.from(dao.busca(q))
.exclude("id")
.serialize();
}
//Imagem
/*@Post("/sistemas/{sistemas.id}/imagem")
public void upload(Sistemas sistemas,
final UploadedFile imagem) {
imagens.salva(imagem, sistemas);
result.redirectTo(SistemasController.class)
.edita(sistemas.getId());
}
@Get("/sistemas/{sistemas.id}/sistemas")
public File download(Sistemas sistemas) {
return imagens.mostra(sistemas);
}*/
}
Tenho a SistemasDAO
@Component
public class SistemasDAO {
private final Session session;
public SistemasDAO(Session session){
this.session = session;
}
public List<Sistemas> listaTudo() {
return this.session.createCriteria(Sistemas.class).list();
//Hibernate.initialize(sistemas.getModulos());
//Hibernate.initialize(sistemas.getRotinas());
}
public void salva(Sistemas sistemas) {
Transaction tx = session.beginTransaction();
session.save(sistemas);
tx.commit();
}
public Sistemas carrega(Long id) {
return (Sistemas) this.session.load(Sistemas.class, id);
}
public void atualiza(Sistemas sistemas) {
Transaction tx = session.beginTransaction();
this.session.update(sistemas);
tx.commit();
}
public void remove(Sistemas sistemas) {
Transaction tx = session.beginTransaction();
this.session.delete(sistemas);
tx.commit();
}
public List<Sistemas> busca(String nome) {
return session.createCriteria(Sistemas.class).add(Restrictions.ilike("nome", nome, MatchMode.ANYWHERE)).list();
}
public void recarrega(Sistemas sistemas) {
session.refresh(sistemas);
}
}
Tenho a classe para interceptar login
package br.com.caelum.goodbuy.infra;
import org.hibernate.Session;
import br.com.caelum.goodbuy.controller.UsuariosController;
import br.com.caelum.goodbuy.modelo.UsuarioWeb;
import br.com.caelum.vraptor.InterceptionException;
import br.com.caelum.vraptor.Intercepts;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.core.InterceptorStack;
import br.com.caelum.vraptor.interceptor.Interceptor;
import br.com.caelum.vraptor.resource.ResourceMethod;
@Intercepts
public class AutorizacaoInterceptor implements Interceptor{
private final UsuarioWeb usuario;
private final Result result;
private final Session session;
public AutorizacaoInterceptor(UsuarioWeb usuario, Result result, Session session) {
this.usuario = usuario;
this.result = result;
this.session = session;
}
public boolean accepts(ResourceMethod method) {
return !usuario.isLogado() && method.containsAnnotation(Restrito.class);
}
public void intercept(InterceptorStack stack, ResourceMethod method,
Object resourceInstance) throws InterceptionException {
result.redirectTo(UsuariosController.class).loginForm();
stack.next(method, resourceInstance);
}
}
@Intercepts
public class IncludesVariablesInViewInterceptor implements Interceptor {
// Este interceptor serve SOMENTE para setar as variáveis na tela.
private final Result result;
private final SistemasDAO dao;
public IncludesVariablesInViewInterceptor(Result result, SistemasDAO dao) {
this.result = result;
this.dao = dao;
}
public boolean accepts(ResourceMethod method) {
return true;// SEMPRE vai interceptar
}
public void intercept(InterceptorStack stack, ResourceMethod method,
Object resourceInstance) throws InterceptionException {
result.include("sistemas", dao.listaTudo()); // Inclui a listagem na view.
stack.next(method, resourceInstance); // Fala para o interceptor seguir seu curso normalmente.
}
}
//a anotação vai ficar disponível em tempo de execucao
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD) // anotação para métodos
public @interface Restrito {
}
E tenho o meu header.jsp
<html>
<body>
<div id="menuprincipal">
<ul >
<li ><a >Home</a></li>
<li><a >Empresa</a>
</li>
<li><a >Sistemas</a>
<ul>
<c:forEach items="${sistemasList}" var="sistemas">
<li><a >${sistemas.nome}</a>
<ul>
<c:forEach items="${sistemas.modulos}" var="modulos">
<li> <a >${modulos.nome}</a>
<ul>
<c:forEach items="${sistemas.rotinas}" var="rotinas">
<li><a >${rotinas.nome}</a></li>
</c:forEach>
</ul></li>
</c:forEach>
</ul>
</c:forEach>
</li>
</ul>
</li>
<li><a >Produtos</a></li>
<li><a >Serviços</a></li>
<li><a >Suporte</a></li>
<li><a >Adquirir</a></li>
<li><a href="https://webmail.softsol.com.br/">Web E-mail</a></li>
<li><a href="https://sac.softsol.com.br/">Documentação</a>
</li>
<li><a href="http://www.softsol.com.br/?link=faq">Dúvidas</a></li>
<li><a href="http://www.softsol.com.br/?link=falecom">Contato</a></li>
</ul>
</div>
Desculpa, e que eu nunca tinha trabalhado com framework. Então fico perdido as vezes.
E tem certas coisas, que eu leio documentação, procuro soluções, mas não as encontro.
Valeu pela força.
Eu vou te confessar que estou quase desistindo de utilizar o vraptor. rsrs.Se eu fosse você, eu tentaria entender a fundo isso. Você ainda não viu todo o potencial do VRaptor. Ainda não é uma boa hora de desistir. Tem uma linha ainda que precisa ser removida:
Isso aqui não está funcionando??package br.com.caelum.goodbuy.infra; import org.hibernate.Session; import br.com.caelum.goodbuy.controller.UsuariosController; import br.com.caelum.goodbuy.modelo.UsuarioWeb; import br.com.caelum.vraptor.InterceptionException; import br.com.caelum.vraptor.Intercepts; import br.com.caelum.vraptor.Result; import br.com.caelum.vraptor.core.InterceptorStack; import br.com.caelum.vraptor.interceptor.Interceptor; import br.com.caelum.vraptor.resource.ResourceMethod; @Intercepts public class AutorizacaoInterceptor implements Interceptor{ private final UsuarioWeb usuario; private final Result result; private final Session session; public AutorizacaoInterceptor(UsuarioWeb usuario, Result result, Session session) { this.usuario = usuario; this.result = result; this.session = session; } public boolean accepts(ResourceMethod method) { return !usuario.isLogado() && method.containsAnnotation(Restrito.class); } public void intercept(InterceptorStack stack, ResourceMethod method, Object resourceInstance) throws InterceptionException { result.redirectTo(UsuariosController.class).loginForm(); stack.next(method, resourceInstance); // ESSA LINHA AQUI SAI. } }
Tenho a classe pra Interceptar todas as páginas, e incluir nela uma view.@Intercepts public class IncludesVariablesInViewInterceptor implements Interceptor { // Este interceptor serve SOMENTE para setar as variáveis na tela. private final Result result; private final SistemasDAO dao; public IncludesVariablesInViewInterceptor(Result result, SistemasDAO dao) { this.result = result; this.dao = dao; } public boolean accepts(ResourceMethod method) { return true;// SEMPRE vai interceptar } public void intercept(InterceptorStack stack, ResourceMethod method, Object resourceInstance) throws InterceptionException { result.include("sistemas", dao.listaTudo()); // Inclui a listagem na view. stack.next(method, resourceInstance); // Fala para o interceptor seguir seu curso normalmente. } }
Desculpa, e que eu nunca tinha trabalhado com framework. Então fico perdido as vezes. E tem certas coisas, que eu leio documentação, procuro soluções, mas não as encontro. Valeu pela força.Então quando você estiver perdido, procure mais sobre, venha aqui no fórum e pergunte, só existe uma regra: não pode ir dormir com isso na cabeça, tenta resolver o quanto antes.
Agora a pergunta: o que não está funcionando?
E aqueles Hibernate.initialize(), por que você ainda não arrumou eles? Já que a sua classe Sistemas está com os atributos LAZY... Ou você faz isso (Eu prefiro essa aqui):@Entity
public class Sistemas {
@Id
@GeneratedValue
private long id;
private String nome;
private String ativo;
private String url;
private String imagem;
@OneToMany(mappedBy = "sistemas",targetEntity= Modulos.class,
fetch = FetchType.EAGER, cascade = CascadeType.ALL) // Troca de LAZY para EAGER
private List<Modulos>modulos;
@OneToMany(mappedBy = "sistemas2",targetEntity= Rotinas.class,
fetch = FetchType.EAGER, cascade = CascadeType.ALL) // Troca de LAZY para EAGER
private List<Rotinas>rotinas;
//Métodos get e set
@Component
public class SistemasDAO {
private final Session session;
public SistemasDAO(Session session){
this.session = session;
}
// ERA ISSO AQUI QUE EU QUERIA QUE VOCÊ FIZESSE NAQUELE DIA EM QUE EU TE EXPLIQUEI SOBRE O HIBERNATE.INITIALIZE()...
public List<Sistemas> listaTudo() {
List<Sistemas> sistemas = this.session.createCriteria(Sistemas.class).list();
for (Sistemas sistema : sistemas){
Hibernate.initialize(sistema.getModulos());
Hibernate.initialize(sistema.getRotinas());
}
return sistemas;
}
public void salva(Sistemas sistemas) {
Transaction tx = session.beginTransaction();
session.save(sistemas);
tx.commit();
}
public Sistemas carrega(Long id) {
return (Sistemas) this.session.load(Sistemas.class, id);
}
public void atualiza(Sistemas sistemas) {
Transaction tx = session.beginTransaction();
this.session.update(sistemas);
tx.commit();
}
public void remove(Sistemas sistemas) {
Transaction tx = session.beginTransaction();
this.session.delete(sistemas);
tx.commit();
}
public List<Sistemas> busca(String nome) {
return session.createCriteria(Sistemas.class).add(Restrictions.ilike("nome", nome, MatchMode.ANYWHERE)).list();
}
public void recarrega(Sistemas sistemas) {
session.refresh(sistemas);
}
}
@Intercepts
public class IncludesVariablesInViewInterceptor implements Interceptor {
// Este interceptor serve SOMENTE para setar as variáveis na tela.
private final Result result;
private final SistemasDAO dao;
public IncludesVariablesInViewInterceptor(Result result, SistemasDAO dao) {
this.result = result;
this.dao = dao;
}
public boolean accepts(ResourceMethod method) {
return true;// SEMPRE vai interceptar
}
public void intercept(InterceptorStack stack, ResourceMethod method,
Object resourceInstance) throws InterceptionException {
result.include("sistemas", dao.listaTudo()); // Inclui a listagem na view.
stack.next(method, resourceInstance); // Fala para o interceptor seguir seu curso normalmente.
}
}
Não funciona!!!
Acredita!
Fiz tudo que você mandou.
Não rola.
Você debugou? Verificou se o interceptor está sendo chamado?
Verificou se a variável está indo para a tela?
Como eu faço isso?
Nao sei.
Não entendo muito!
Mas olha, toda vez que eu abro uma página.
Ele coloca isso no console.
Hibernate:
select
this_.id as id0_0_,
this_.ativo as ativo0_0_,
this_.imagem as imagem0_0_,
this_.nome as nome0_0_,
this_.url as url0_0_
from
Sistemas this_
Agora, quando eu abro a página sistemas, onde lista o menu corretamente, ele lista assim.
Hibernate:
select
this_.id as id0_0_,
this_.ativo as ativo0_0_,
this_.imagem as imagem0_0_,
this_.nome as nome0_0_,
this_.url as url0_0_
from
Sistemas this_
Hibernate:
select
this_.id as id0_0_,
this_.ativo as ativo0_0_,
this_.imagem as imagem0_0_,
this_.nome as nome0_0_,
this_.url as url0_0_
from
Sistemas this_
Hibernate:
select
modulos0_.sistemas_id as sistemas6_0_1_,
modulos0_.id as id1_,
modulos0_.id as id1_0_,
modulos0_.ativo as ativo1_0_,
modulos0_.imagem as imagem1_0_,
modulos0_.nome as nome1_0_,
modulos0_.sistemas_id as sistemas6_1_0_,
modulos0_.url as url1_0_
from
Modulos modulos0_
where
modulos0_.sistemas_id=?
Hibernate:
select
modulos0_.sistemas_id as sistemas6_0_1_,
modulos0_.id as id1_,
modulos0_.id as id1_0_,
modulos0_.ativo as ativo1_0_,
modulos0_.imagem as imagem1_0_,
modulos0_.nome as nome1_0_,
modulos0_.sistemas_id as sistemas6_1_0_,
modulos0_.url as url1_0_
from
Modulos modulos0_
where
modulos0_.sistemas_id=?
Hibernate:
select
modulos0_.sistemas_id as sistemas6_0_1_,
modulos0_.id as id1_,
modulos0_.id as id1_0_,
modulos0_.ativo as ativo1_0_,
modulos0_.imagem as imagem1_0_,
modulos0_.nome as nome1_0_,
modulos0_.sistemas_id as sistemas6_1_0_,
modulos0_.url as url1_0_
from
Modulos modulos0_
where
modulos0_.sistemas_id=?
Hibernate:
select
modulos0_.sistemas_id as sistemas6_0_1_,
modulos0_.id as id1_,
modulos0_.id as id1_0_,
modulos0_.ativo as ativo1_0_,
modulos0_.imagem as imagem1_0_,
modulos0_.nome as nome1_0_,
modulos0_.sistemas_id as sistemas6_1_0_,
modulos0_.url as url1_0_
from
Modulos modulos0_
where
modulos0_.sistemas_id=?
Hibernate:
select
modulos0_.sistemas_id as sistemas6_0_1_,
modulos0_.id as id1_,
modulos0_.id as id1_0_,
modulos0_.ativo as ativo1_0_,
modulos0_.imagem as imagem1_0_,
modulos0_.nome as nome1_0_,
modulos0_.sistemas_id as sistemas6_1_0_,
modulos0_.url as url1_0_
from
Modulos modulos0_
where
modulos0_.sistemas_id=?
Hibernate:
select
rotinas0_.sistemas_id as sistemas7_0_3_,
rotinas0_.id as id3_,
rotinas0_.id as id3_2_,
rotinas0_.ativo as ativo3_2_,
rotinas0_.imagem as imagem3_2_,
rotinas0_.modulos_id as modulos6_3_2_,
rotinas0_.nome as nome3_2_,
rotinas0_.sistemas_id as sistemas7_3_2_,
rotinas0_.url as url3_2_,
modulos1_.id as id1_0_,
modulos1_.ativo as ativo1_0_,
modulos1_.imagem as imagem1_0_,
modulos1_.nome as nome1_0_,
modulos1_.sistemas_id as sistemas6_1_0_,
modulos1_.url as url1_0_,
sistemas2_.id as id0_1_,
sistemas2_.ativo as ativo0_1_,
sistemas2_.imagem as imagem0_1_,
sistemas2_.nome as nome0_1_,
sistemas2_.url as url0_1_
from
Rotinas rotinas0_
left outer join
Modulos modulos1_
on rotinas0_.modulos_id=modulos1_.id
left outer join
Sistemas sistemas2_
on modulos1_.sistemas_id=sistemas2_.id
where
rotinas0_.sistemas_id=?
Parece que ele lista vazio nas outras páginas.
Olha o que eu fiz na classe.
Pra testar o interceptor.
public void intercept(InterceptorStack stack, ResourceMethod method,
Object resourceInstance) throws InterceptionException {
System.out.println("Interceptor1");
result.include( "sistemas",dao.listaTudo()); // Inclui a listagem na view.
System.out.println("Interceptor2");
stack.next(method, resourceInstance); // Fala para o interceptor seguir seu curso normalmente.
System.out.println("Interceptor3");
}
Resultado quando abro a página incial por exemplo.
Interceptor1
Hibernate:
select
this_.id as id0_0_,
this_.ativo as ativo0_0_,
this_.imagem as imagem0_0_,
this_.nome as nome0_0_,
this_.url as url0_0_
from
Sistemas this_
Interceptor2
Interceptor3
Creio que o erro está na linha.
result.include( "sistemas",dao.listaTudo()); // Inclui a listagem na view.
Você arrumou a classe Sistemas para EAGER ou arrumou o DAO para fazer o Hibernate.initialize?
Fiz a alteração no DAO.
Testei, não funcionou!
Fiz alteração do Eager.
Testei, não funcionou!
Voltei ao estado antigo.
Você viu os logs que te mandei?
Eu vi os logs que você me mandou, aquilo lá significa que o Hibernate só carregou a classe sistemas por que ele achou que você não ia usar as outras listas… Me mostra como que você fez essas alterações.
Isso que você está tendo é problema no Hibernate e não no VRaptor, ok?
Brother,
Consegui!
E o seguinte, eu por não saber. Tinha retirado da linha. A palavra List, tinha deixado apenas sistemas.
result.include( "sistemasList",dao.listaTudo()); // Inclui a listagem na view.
Com as alterações que VOCÊ FEZ PARA MIM, criando um interceptor para todas as páginas.
E com essa linha corrigida, funcionou!
Você não tem noção o quanto me ajudou. Valeu mesmo cara. Já estava pra ficar louco.
Então o código ficou assim.
Para incluir um método em todas as páginas, precisamos criar um interceptor para isso.
Então temos…
@Intercepts
public class IncludesVariablesInViewInterceptor implements Interceptor {
// Este interceptor serve SOMENTE para setar as variáveis na tela.
private final Result result;
private final SistemasDAO dao;
public IncludesVariablesInViewInterceptor(Result result, SistemasDAO dao) {
this.result = result;
this.dao = dao;
}
public boolean accepts(ResourceMethod method) {
return true;// SEMPRE vai interceptar
}
public void intercept(InterceptorStack stack, ResourceMethod method,
Object resourceInstance) throws InterceptionException {
result.include( "sistemasList",dao.listaTudo()); // Inclui a listagem na view.
stack.next(method, resourceInstance); // Fala para o interceptor seguir seu curso normalmente.
}
}
Metodo que precisa estar em todas as páginas.
@Get("/produtos")
public List<Produto> lista() {
return dao.listaTudo();
}
Tópico resolvido!
Valeu!
Bom, ainda existe uma melhoria:
Aquela sua action que retorna uma lista de Sistemas, não precisa mais retorná-la, pois o interceptor já vai fazer isso…
Só precisa tomar cuidado se algum dia você mudar o interceptor.
Ainda bem que funcionou. Procura entender cada coisinha que foi feita…
Abraços e sucesso.
Ok!
Vou ver isso!
Nossa aprendi muito!
Eu até já resolvi um outro problema.
Tinha criado um controle de usuários, e precisa que fosse feita a verificação em todas as páginas.
Com esse interceptor em todas as páginas, foi fácil.
Claro que criei outro.rsrs.
Valeu mesmo!
Desculpa ae qualquer coisa.