Exibir dados na jsp (Struts2, JPA, Acegi Security)

2 respostas
V

Olá,

Estou fazendo uma aplicação que, mediante perfil do usuário, é gerado um menu. Estes menus estão cadastrados em banco de dados. Utilizo JPA para persistência dos dados. Realizo consulta, a página com o perfil aparece, porém não exibe o resultado da consulta de menu na jsp. Utilizo Strust2. Já tentei até seguindo o exemplo no site Strust2 e tutorial Roseindia, porém sem sucesso. Utiilizo o Acegi security para tratar o perfil da aplicação. Já tentei jstl, sem êxito também!
O erro que dá é esse usando o Strust2:

11:10:02,890 WARN AppendIterator:143 - param with value resolved as null cannot be make as iterator, it will be ignored and hence will not appear in the merged iterator

Agradeço desde já a ajuda. :smiley:

Verônica

Abaixo o código:

Classe Menu:

import java.io.Serializable;

import javax.persistence.Entity;

import javax.persistence.Id;

import javax.persistence.JoinColumn;

import javax.persistence.ManyToOne;

import javax.persistence.NamedQuery;

import javax.persistence.Table;
@Entity

@Table(name=menu)

public class Menu implements Serializable {

@Id

private int id;
private String link;

private String menus;

@ManyToOne
@JoinColumn(name="role")
private Roles role;

private static final long serialVersionUID = 1L;

public Menu() {
	super();
}

public int getId() {
	return this.id;
}

public void setId(int id) {
	this.id = id;
}

public String getLink() {
	return this.link;
}

public void setLink(String link) {
	this.link = link;
}

public String getMenus() {
	return this.menus;
}

public void setMenus(String menus) {
	this.menus = menus;
}

public Roles getRole() {
	return this.role;
}

public void setRole(Roles role) {
	this.role = role;
}

}

Classe Role que relaciona-se com a classe acima:

import java.io.Serializable;

import java.util.Set;

import javax.persistence.Column;

import javax.persistence.Entity;

import javax.persistence.Id;

import javax.persistence.OneToMany;
@Entity

public class Roles implements Serializable {

@Id

@OneToMany(mappedBy=id)

private int id;
@Column(name="tipo_role")

private String tipoRole;

private static final long serialVersionUID = 1L;

public Roles() {
	super();
}

public int getId() {
	return this.id;
}

public void setId(int id) {
	this.id = id;
}

public String getTipoRole() {
	return this.tipoRole;
}

public void setTipoRole(String tipoRole) {
	this.tipoRole = tipoRole;
}

}

Classe que realiza a consulta:

import java.util.ArrayList;

import java.util.Collection;

import java.util.Iterator;

import java.util.List;
import javax.persistence.EntityManager;

import javax.persistence.EntityManagerFactory;

import javax.persistence.EntityTransaction;

import javax.persistence.Persistence;

import javax.persistence.PersistenceContext;

import javax.persistence.Query;

import br.persistence.Menu;

public class MenuDaoImpl {

private EntityManagerFactory emf = null;
private EntityManager em = null;
private List listando = new ArrayList();


public MenuDaoImpl(){
	
	emf = Persistence.createEntityManagerFactory("ProjetoPerfil");
	em = emf.createEntityManager();
	
	}


public List listar (String menus){
	
	EntityTransaction txt = em.getTransaction();
	txt.begin();
	Query q = em.createQuery(" from Menu menus ");
	List resultList = q.getResultList();
	List listando = resultList;
	txt.commit();
	em.close();
	return listando;
	
}


public List getListando() {
	return listando;
}

}

página jsp:

<%@taglib uri="/struts-tags" prefix=“s”%>

<s:append id=“myAppendIterator”>
<s:param value="%{listando}" />

</s:append>
<s:iterator value="%{#myAppendIterator}">
<s:property />
</s:iterator>

2 Respostas

ruyoutor

Estou começando a fazer uma aplicação que vai usar um meu dessa forma que você está fazendo me indicaram e eu to dando uma olhada em TagLibs inclusive existe até um componente pronto expecifico para fazer isso na internet é só dar uma procurada no forum mesmo por “menu dinamico” que você vai achar, mas a ideia de fazer com tags customizadas desenvolvendo as próprias tags eu achei melhor.Dá uma procurada na web e também tem um livro muito bom “Use a Cabeça Servlet e Jsp” (Que eu estou lendo) que é muito bom fala sobre isso também.

Espero ter ajudao.

V

Obrigada pela reposta.

Pesquisei mais e vi que o Acegi trata desta questão de menus dinâmicos. E como estou usando ele para tratar da segurança da aplicação então usei as tags próprias dele. De acordo com o perfil é utilizado o seguinte:

na pagina jsp onde quero que apareça o menu dinâmico:

<%@ taglib prefix=“authz” uri=“http://acegisecurity.org/authz” %>

<authz:authorize ifAllGranted=“perfil1”>

coloco a estrutura do menu que quero

</authz:authorize>

Uso est tag authz:authorize tantos quantos forem meus menus dinâmicos de acordo com o perfil.

O uso do framework acegi facilita muito o trabalho de tratar questão de autorização e autenticação de aplicações web. Vale apena estudá-lo.

Obrigada pela sua reposta.

Veronica

Criado 11 de dezembro de 2007
Ultima resposta 13 de dez. de 2007
Respostas 2
Participantes 2