Boa tarde, eu fiz isso essa semana. Só que com o menubar, ficou bem legal. Fiz o seguinte. Criei no meu DB uma tabela ACESSO nesta tabela eu tenho a URL, a IMAGEM, o NOME do Menu, tenho a ordem e tenho se ele é submenu apontando o id de um menu pai para ele. Depois criei uma outra tabela de PERFIL, nesta tabela consta somente a descrição do perfil ex. supervisor, diretor ... Depois criei uma tabela Perfil-Acesso contendo o perfil e os acesso que o cara pode ter, pegando o ID do PERFIL e o ID do ACESSO. Ate ai tranquilo. Isso foi o que fiz no DB. Criei as classes de entidades, DAOs, regra de negócios ETC no java. Então criei uma classe de menu.
Meu Bean:
@ManagedBean(name = "menuBean")
@SessionScoped
public class MenuBean {
private MenuModel menuModel;
public MenuBean() {
montarMenu();
}
public MenuModel getMenuModel() {
return menuModel;
}
public void setMenuModel(MenuModel menuModel) {
this.menuModel = menuModel;
}
public void montarMenu() {
menuModel = new DefaultMenuModel();
MenuRN menuRN = new MenuRN();
ContextoBean contextoBean = new ContextoBean();
List<PerfilAcesso> listPa = menuRN.listMenu(contextoBean
.getUsuarioLogado().getPerfil());
List<PerfilAcesso> itemMenu;
for (PerfilAcesso pa : listPa) {
Submenu submenu = new Submenu();
submenu.setLabel(pa.getAcesso().getDescricao());
submenu.setIcon(pa.getAcesso().getImagem());
menuModel.addSubmenu(submenu);
itemMenu = menuRN.listSubMenu(pa.getAcesso().getId_acesso());
for (PerfilAcesso s : itemMenu) {
MenuItem item = new MenuItem();
item.setValue(s.getAcesso().getDescricao());
item.setUrl(s.getAcesso().getUrl());
submenu.getChildren().add(item);
}
}
}
}
Meu xhtml:
<h:panelGrid>
<h:form>
<p:menubar style="background:#3399FF; border:0;" model="#{menuBean.menuModel}" />
</h:form>
</h:panelGrid>
Meu DAOImpl
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import com.controlmobile.DAO.MenuDAO;
import com.controlmobile.entity.Perfil;
import com.controlmobile.entity.PerfilAcesso;
public class MenuDAOImpl implements MenuDAO {
private Session session;
public Session getSession() {
return session;
}
public void setSession(Session session) {
this.session = session;
}
@SuppressWarnings("unchecked")
@Override
public List<PerfilAcesso> listMenu(Perfil perfil) {
String hql = "From PerfilAcesso pa where pa.acesso.parente = 0 and pa.perfil =:perfil order by pa.acesso.ordem ";
Query query = this.session.createQuery(hql);
query.setParameter("perfil", perfil);
return query.list();
}
@SuppressWarnings("unchecked")
@Override
public List<PerfilAcesso> listSubMenu(Integer acesso) {
String hql = "From PerfilAcesso pa where pa.acesso.parente =:acesso order by pa.acesso.ordem";
Query query = this.session.createQuery(hql);
query.setParameter("acesso", acesso);
return query.list();
}
}
Espero ter te ajudado, ou pelo menos de dado um norte.
Abraços
Wellington Fernandes