Passar outcome no componente Menu do PrimeFaces

0 respostas
jrfercar

Boa tarde,

Estou com o seguinte problema e peço a ajuda de quem puder me ajudar para solucioná-lo.

Tenho um menu dinâmico, que é carregado a partir do banco de dados.

Quando eu entro no sistema após o cadastro, devido à passagem de uma tela para outra ser por POST, através de Outcome, o url vem de uma forma, e o menu que contem o valor como sendo o nome completo de uma página destino, acessa ou não acessa a página destino. Este acessa ou não acessa é devido ao jsf completar o nome completo do arquivo xhtml, com o url da página que está desatualizado.
Um exemplo disto, é que quando acesso a página de menu após a tela de autenticação, o url vem de outra forma. Não consigo solucionar este problema. Porém, acredito que passar para o menu, não o nome da página, mas sim um outcome possa resolver o problema.

Se alguém puder me ajudar a solucionar este problema, agradeço imensamente. Segue a seguir os códigos dos arquivos envolvidos.

Página de Login

<h:form styleClass="right_content">
                <p:growl id="login"/>
                <h:panelGrid columns="2" cellpadding="2">
                    <h:outputLabel value="Identificador:" for="identificacao"/>
                    <p:inputText id="identificacao" value="#{autenticacaoBean.identificador}" required="true" requiredMessage="Insira um identificador!"/>
                    <h:outputLabel value="Senha:" for="senha"/>
                    <p:keyboard id="senha" password="true" value="#{autenticacaoBean.senha}" required="true" requiredMessage="Insira a sua senha de acesso!"/>
                    <h:commandLink id="lnkNovaPessoa" value="Novo Cadastro" action="newpessoa" immediate="true"/>
                    <h:commandLink value="Entrar" action="#{autenticacaoBean.entrar}"/>
                </h:panelGrid>
            </h:form>
@ManagedBean
public class AutenticacaoBean {

    @EJB
    private EmailDao ed;
    @EJB
    private PessoaFisicaDao pfd;
    @EJB
    private AdministradorDao ad;
    @EJB
    private PessoaJuridicaDao pjd;
    private PessoaFisica pessoaFisica;
    private PessoaJuridica pessoaJuridica;
    private Administrador administrador;
    private Email email;
    private String identificador;
    private String senha;
    private HttpSession session;

    public String entrar() {
        String retorno = "index";

        validar();

        if (pessoaFisica != null) {
            retorno = "home";
        }

        return retorno;
    }

    public void validar() {
        email = ed.pesqParam(""
                + "SELECT e FROM Email e "
                + " JOIN FETCH e.pessoa p "
                + " WHERE e.valor = '" + identificador + "' AND p.senha.valor = '" + Criptografia.criptografar(senha) + "'");
        if (email != null) {
            pessoaFisica = pfd.pesqParam(""
                    + "Select p From PessoaFisica p "
                    + "LEFT JOIN FETCH p.documentos d "
                    + "LEFT JOIN FETCH p.websites w "
                    + "LEFT JOIN FETCH p.emails e "
                    + "LEFT JOIN FETCH p.imagens i "
                    + "LEFT JOIN FETCH p.enderecos n "
                    + "LEFT JOIN FETCH p.telefones l "
                    + "LEFT JOIN FETCH p.categoriasRelacionais r "
                    + "Where p.id = '" + email.getPessoa().getId() + "'");

            if (pessoaFisica != null) {
                session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
                session.setAttribute("pessoa", pessoaFisica);


                pessoaJuridica = pjd.pesqParam(""
                        + "Select p From PessoaJuridica p "
                        + "LEFT JOIN FETCH p.funcionarios f "
                        + "LEFT JOIN FETCH p.websites w "
                        + "LEFT JOIN FETCH p.emails e "
                        + "LEFT JOIN FETCH p.imagens i "
                        + "LEFT JOIN FETCH p.enderecos n "
                        + "LEFT JOIN FETCH p.telefones l "
                        + "LEFT JOIN FETCH p.categoriasRelacionais r "
                        + "Where p.id = '" + email.getPessoa().getId() + "'");

                administrador = ad.pesqParam(""
                        + "Select a From Administrador a "
                        + "Where a.id = '" + email.getPessoa().getId() + "'");

                if (pessoaJuridica != null) {
                    session.setAttribute("empresa", pessoaJuridica);
                    session.setAttribute("permissao", Permissao.PESSOA_JURIDICA);
                } else if (administrador != null) {
                    session.setAttribute("permissao", Permissao.ADMINISTRADOR);
                } else {
                    session.setAttribute("permissao", Permissao.PESSOA_FISICA);
                }
            }
        } else {
            FacesUtils.mensInfo("Identificador ou Senha Incorretos!");
        }
    }

    public String sair() {
        return "index";
    }
}

Parte da página que contém o menu.

<h:form id="frmPerfil">
                    <p:graphicImage id="gpiFoto" value="#{perfilBean.stcImagem}" width="160" height="200" cache="false" styleClass="Foto_Padrao" />

                    <p:menu model="#{menuBean.model}" />
                </h:form>

Classe MenuBean.

@ManagedBean
public class MenuBean {

    @EJB
    private MenuDao md;
    private List<Menu> menus;
    private MenuModel model;
    private Submenu submenu;
    private Permissao permissao;
    private HttpSession session;

    public MenuModel getModel() {
        session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
        permissao = (Permissao) session.getAttribute("permissao");

        init();
        return model;
    }

    private void init() {
        menus = md.listPesq("SELECT m FROM Menu m WHERE m.menu is null AND m.permissao >= " + permissao.get());

        if (menus != null) {
            model = new DefaultMenuModel();
            MenuItem item = new MenuItem();

            for (Menu menu : menus) {
                System.out.println("SubMenu");
                System.out.println(menu.getNome());
                submenu = new Submenu();
                submenu.setLabel(menu.getNome());

                if (menu.getMenus() != null) {
                    System.out.println("Item");
                    for (Menu i : menu.getMenus()) {
                        if (i.getPermissao() >= permissao.get()) {
                            System.out.println(i.getNome());
                            item = new MenuItem();
                            item.setValue(i.getNome());
                            if (!i.getCommand().equals("") && i.getCommand() != null) {
                                if (i.getCommand().contains("html")) {
                                    item.setUrl(i.getCommand());
                                } else {
                                    MethodExpression action = FacesContext.getCurrentInstance().getApplication().getExpressionFactory().createMethodExpression(FacesContext.getCurrentInstance().getELContext(), i.getCommand(), null, new Class<?>[0]);
                                    item.setActionExpression(action);
                                }
                            }
                            submenu.getChildren().add(item);
                        }
                    }
                }
                model.addSubmenu(submenu);
            }
        }

        model.addSubmenu(submenu);
    }
}
Criado 5 de outubro de 2011
Respostas 0
Participantes 1