Bom dia pessoal,
gostaria de saber porque meu menu do richfaces não está funcionando.
Alguém saberia me dizer o porquê ?
<body>
<h:form>
<rich:dropDownMenu value="Convenio" direction="bottom-right" jointPoint="tr">
<rich:menuItem action="CadastrarConvenio" value="cadastrar convenio" />
<rich:menuItem action="PesquisarConvenio" value="pesquisar convenio" />
</rich:dropDownMenu>
<h:commandLink value="Sair" action="#{loginMBean.sair}" onclick="return confirm('Deseja realmente sair da aplicação?')" styleClass="sair" style="margin-left:6px;"/>
</h:form>
</body>
aqui está meu faces-config.
<navigation-rule>
<from-view-id>/pages/pesquisa/PesquisarConvenio.xhtml</from-view-id>
<navigation-case>
<from-outcome>PesquisarConvenio</from-outcome>
<to-view-id>/pages/pesquisa/PesquisarConvenio.xhtml</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>CadastrarConvenio</from-outcome>
<to-view-id>/pages/cadastro/CadastrarConvenio.xhtml</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>EditarConvenio</from-outcome>
<to-view-id>/pages/editar/EditarConvenio.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
<application>
<view-handler>com.sun.facelets.FaceletViewHandler</view-handler>
</application>
</faces-config>
Alguém saberia me dizer ?
Se não me engano a Action tem que ser um método do seu ManagedBean… Eu costumo utilizar um ManagedBean de request para tratar redirecionamento…Funciona bem… Veja…
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package MngBeans;
/**
*
* @author Vinicius
*/
public class NavigationController {
private String url = "nullPage.jsp";
/** Creates a new instance of NavigationController */
public NavigationController() {
}
/**
* @return the url
*/
public String getUrl() {
return url;
}
/**
* @param url the url to set
*/
public void setUrl(String url) {
this.url = url;
}
}
Diferente de vc eu uso Ajax pra exibir a página sem recarregar o menu (dentro de uma div)…
o menu fica assim:
<rich:menuItem submitMode="ajax" value="Minhas Aulas" id="aulas" reRender="main_painel" >
<a4j:actionparam name="url" value="ModalMinhasAulas.jsp" assignTo="#{NavigationController.url}"/>
</rich:menuItem>
Que vai dar um render aki:
<jsp:directive.include file="ModalDadosFuncionarios.jsp"/>
<jsp:directive.include file="Menu.jsp"/>
<rich:panel id="main_painel" style=" background: transparent;border: none;" >
<div id="areaTrab" align = "center">
<a4j:include viewId="#{NavigationController.url}" />
<br>
<br>
<a4j:outputPanel id="panel_ajax" ajaxRendered="true">
<a4j:status id="status">
<f:facet name="start">
<h:graphicImage value="loadingAnimation.gif"/>
</f:facet>
</a4j:status>
</a4j:outputPanel>
</div>
</rich:panel>
Más vc pode usar as navigations rules simplesmente sem usar ajax… vc manda apenas ele retornar a String com o valor que ele tem q navegar…
Beleza Vinicius. Vou testar aqui os 2 modos utilizando um métodos. tanto usando um MB e usando Ajax. Eu só tenho uma dúvida, se eu utilizar um MB do tipo session, vai da algum pro ? Sabe me informar. ?
Bem utilizando um método dentro do mb e retornando a action não funcionou.
tentei assim:
public String redirecionarMenu(){
return "CadastrarConvenio";
}
onde a action CadastrarConvenio se encontra aqui
<navigation-case>
<from-outcome>CadastrarConvenio</from-outcome>
<to-view-id>/pages/cadastro/CadastrarConvenio.xhtml</to-view-id>
</navigation-case>
E eu tentei também jogar o link da pagina direto:
public String redirecionarMenu(){
return "/pages/cadastro/CadastrarConvenio.xhtml";
}
Porém não funciona…
vou testar com ajax … agora
Eu tenho um caso de navigation rule no meu sistema soh… olha ai… ve se ajuda…
<navigation-rule>
<from-view-id>/index.jsp</from-view-id>
<navigation-case>
<from-outcome>usr_ok</from-outcome>
<to-view-id>/Main.jsp</to-view-id>
</navigation-case>
</navigation-rule>
<a4j:commandButton value="Login" action="#{LoginBean.logar}" reRender="panel_msg" />
public String logar(){
try{
Session session = Util.HibernateUtil.getSessionFactory().openSession();
FuncionarioDAO acessoDAO = new FuncionarioDAO(session);
FacesContext fc = FacesContext.getCurrentInstance();
Funcionario func = (Funcionario) fc.getApplication().getVariableResolver().resolveVariable(fc, "func");
FuncionarioPK func_pk = (FuncionarioPK) fc.getApplication().getVariableResolver().resolveVariable(fc, "funcpk");
Empresa empresa = (Empresa) fc.getApplication().getVariableResolver().resolveVariable(fc, "empresa");
func_pk.setEmpresaId(empresa.getId());
func.setFuncionarioPK(func_pk);
return acessoDAO.verificaAutenticacao(func);
}catch(Exception e){
return "Erro no VariableResolver." + e.getMessage();
}
}
Aqui que ta o lance… se for validado retorna a String…
[code]
public String verificaAutenticacao(Usuario usr) {
Query query = session.createQuery(“SELECT u FROM Usuario u WHERE u.id = :id AND u.senha = :pw”);
query.setParameter(“pw”, usr.getSenha());
query.setParameter(“id”, usr.getId());
Usuario user = (Usuario) query.uniqueResult();
if (user == null) {
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Usuário ou senha incorretos"));
return null;
} else if(user.getStatusUserId().getId() == 1) {
usr = user;
return "usr_ok";
} else {
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Usuário bloqueado ou inativo"));
return null;
}
}[/code]
Seu menu:
<body>
<h:form>
<rich:dropDownMenu value="Convenio" direction="bottom-right" jointPoint="tr">
<rich:menuItem action="#{actionMB.cadastrarConvenio}" value="cadastrar convenio" />
<rich:menuItem action="#{actionMB.pesquisarConvenio}" value="pesquisar convenio" />
</rich:dropDownMenu>
<h:commandLink value="Sair" action="#{loginMBean.sair}" onclick="return
confirm('Deseja realmente sair da aplicação?')" styleClass="sair" style="margin-left:6px;"/>
</h:form>
</body>
Seu me]anaged bean com as actions:
public class ActionMB{
public String cadastrarConvenio(){
return "CadastrarConvenio";
}
public String pesquisarConvenio(){
return "PesquisarConvenio";
}
}
Seu faces-config.xml:
<navigation-rule>
<from-view-id>/pages/pesquisa/PesquisarConvenio.xhtml</from-view-id>
<navigation-case>
<from-outcome>PesquisarConvenio</from-outcome>
<to-view-id>/pages/pesquisa/PesquisarConvenio.xhtml</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>CadastrarConvenio</from-outcome>
<to-view-id>/pages/cadastro/CadastrarConvenio.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
Você deve registar o seu Managed Bean no faces-config também.
Espero ter ajudado.
Ele já está registrado henrique.
<managed-bean>
<managed-bean-name>cadastrarConvenio</managed-bean-name>
<managed-bean-class>br.gov.ce.srh.patrimonio.faces.CadastrarConvenio</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
…
Não está não.
![:cry: :cry:](https://www.guj.com.br/images/emoji/twitter/cry.png?v=6)
…
eu clico no menu… ele tipo carrega mas volta ao inicio…
e não faz nada… não joga erro… não mostra nada…
Você ja experimentou usar o debug e ver se está chegando nos métodos que eu te passei?
Já sim… Ele passa pelo método do MBean … este abaixo:
public String redirecionarMenu(){
return "CadastrarConvenio";
}
na qual esse return é uma action…
<navigation-case>
<from-outcome>CadastrarConvenio</from-outcome>
<to-view-id>/pages/cadastro/CadastrarConvenio.xhtml</to-view-id>
</navigation-case>
Só mais uma coisa, se não for pedir muito. Coloca o trecho do código do menu onde você chama a sua action.
é este:
!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:rich="http://richfaces.org/rich">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<style type="text/css">
a.sair:link {text-decoration: none}
a.sair:visited {text-decoration: none}
a.sair:hover {color: #000000}
a.sair:active {text-decoration: none}
a.sair {color:#000000}
</style>
</head>
<body>
<h:form>
<rich:dropDownMenu value="Convenio" direction="bottom-right" jointPoint="tr">
<rich:menuItem action="#{cadastrarConvenio.redirecionarMenu}" value="cadastrar convenio" />
<rich:menuItem action="PesquisarConvenio" value="pesquisar convenio" />
</rich:dropDownMenu>
</h:form>
</body>
</html>
E ai cara, conseguiu resolver o problema?
consegui sim mano.
Há muito tempo já.
Você está com esse problema é. ?
Se quiser, posto os códigos aqui.
Estou com o mesmo problema, por favor poderia postar o codigo?
Grato.
assim ficou meu menu depois que eu ajeitei.
<rich:dropDownMenu value="Cadastro" direction="bottom-right" jointPoint="tr" >
<rich:menuItem value="Material" submitMode="client" onclick="window.open('http://hefesto:8080/bdlist/')" />
<rich:menuItem action="CadastrarConvenio" value="cadastrar convenio" />
<rich:menuItem action="CadastrarFornecedor" value="cadastrar fornecedor"/>
<rich:menuItem action="CadastrarNotaFiscal" value="cadastrar nota fiscal"/>
<rich:menuItem action="CadastrarDeprecicao" value="Depereciacao"/>
</rich:dropDownMenu>
<rich:dropDownMenu value="Consulta" direction="bottom-right" jointPoint="tr" >
<rich:menuItem action="PesquisarConvenio" value="consultar convenio" />
<rich:menuItem action="PesquisarFornecedor" value="consultar fornecedor" />
<rich:menuItem action="PesquisarNotaFiscal" value="pesquisar nota fiscal"/>
</rich:dropDownMenu>
<rich:dropDownMenu value="Patrimonio" direction="bottom-right" jointPoint="tr" >
<rich:menuItem action="PesquisarPatrimonio" value="Patrimonio Cadastrado"/>
<rich:menuItem action="PesquisarPatrimonioNaoCadastrado" value="Patrimonio Não Cadastrado"/>
</rich:dropDownMenu>
<rich:dropDownMenu value="Relatorios" direction="bottom-right" jointPoint="tr" >
</rich:dropDownMenu>
<h:commandLink value="Sair" action="#{loginMBean.sair}" onclick="return confirm('Deseja realmente sair da aplicação?')" styleClass="sair" style="margin-left:6px;"/>
Ainda não esta funcionando…
Poderia postar o seu MB?
Eu preciso saber, oq que acontece no seu menu ?
você clica em alguma opção e não faz nada, é isso ?