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);
}
}