Habilitando menus dinamicamente

1 resposta
pintofree

Pessoal tenho uma aplicação em Seam 2.2 e Hibernate

Nela ao detalhar um item tenho que validar o Status do Mesmo e o Usuario logado, e então habilitar ou não a Visualização dos Botões.

São cerca de 12 botões (pode crescer ainda), sendo que cada um tem sua regra, no caso o codigo esta meio bagunçado e grande demais, cara validação de botão tem varios ifs, gostaria de saber se alguem tem um Padrão de Projeto ou outra Solução que poderia me ajudar a solucionar meu problema.

Exemplo de Botão:

if (itemVO.isItemEmTransito() && isDetentorDestino()
				&& itemVO.getSituacao().equals(SituacaoProcesso.CORRENTE)
				&& itemVO.getLocalDestinoVO().getTipoLocalVO().getLocalExterno() == SimNao.NAO) {
			return !itemVO.isArquivado() && !itemVO.isApenso();
		}

1 Resposta

W

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

Criado 5 de dezembro de 2011
Ultima resposta 5 de dez. de 2011
Respostas 1
Participantes 2