Menu do Richfaces não está redirecionando as paginas

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


 &lt;navigation-case&gt;
   &lt;from-outcome&gt;CadastrarConvenio&lt;/from-outcome&gt;
   &lt;to-view-id&gt;/pages/cadastro/CadastrarConvenio.xhtml&lt;/to-view-id&gt;
  &lt;/navigation-case&gt;

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:

&lt;body&gt;
     &lt;h:form&gt;
          &lt;rich:dropDownMenu value="Convenio" direction="bottom-right" jointPoint="tr"&gt;
               &lt;rich:menuItem action="#{actionMB.cadastrarConvenio}" value="cadastrar convenio"  /&gt;
	       &lt;rich:menuItem action="#{actionMB.pesquisarConvenio}" value="pesquisar convenio"  /&gt;				
          &lt;/rich:dropDownMenu&gt;
          
	  &lt;h:commandLink value="Sair" action="#{loginMBean.sair}" onclick="return 
	     confirm('Deseja realmente sair da aplicação?')" styleClass="sair" style="margin-left:6px;"/&gt;

     &lt;/h:form&gt;
&lt;/body&gt;

Seu me]anaged bean com as actions:

public class ActionMB{

     public String cadastrarConvenio(){
          return "CadastrarConvenio";
     }

     public String pesquisarConvenio(){
          return "PesquisarConvenio"; 
     }
}

Seu faces-config.xml:

&lt;navigation-rule&gt;   
   &lt;from-view-id&gt;/pages/pesquisa/PesquisarConvenio.xhtml&lt;/from-view-id&gt;
   &lt;navigation-case&gt;
      &lt;from-outcome&gt;PesquisarConvenio&lt;/from-outcome&gt;
      &lt;to-view-id&gt;/pages/pesquisa/PesquisarConvenio.xhtml&lt;/to-view-id&gt;
   &lt;/navigation-case&gt;

   &lt;navigation-case&gt;
      &lt;from-outcome&gt;CadastrarConvenio&lt;/from-outcome&gt;
      &lt;to-view-id&gt;/pages/cadastro/CadastrarConvenio.xhtml&lt;/to-view-id&gt;
   &lt;/navigation-case&gt;
&lt;/navigation-rule&gt;

Você deve registar o seu Managed Bean no faces-config também.

Espero ter ajudado.

Ele já está registrado henrique.


&lt;managed-bean&gt;
  &lt;managed-bean-name&gt;cadastrarConvenio&lt;/managed-bean-name&gt;
  &lt;managed-bean-class&gt;br.gov.ce.srh.patrimonio.faces.CadastrarConvenio&lt;/managed-bean-class&gt;
  &lt;managed-bean-scope&gt;session&lt;/managed-bean-scope&gt;
 &lt;/managed-bean&gt;

Está funcionando agora?

Não está não.

:cry:

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…


  &lt;navigation-case&gt;
   &lt;from-outcome&gt;CadastrarConvenio&lt;/from-outcome&gt;
   &lt;to-view-id&gt;/pages/cadastro/CadastrarConvenio.xhtml&lt;/to-view-id&gt;
  &lt;/navigation-case&gt;

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 &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;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"&gt;

	&lt;head&gt;
		&lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/&gt;

&lt;style type="text/css"&gt;
  	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}
 &lt;/style&gt;
	&lt;/head&gt;
	
	&lt;body&gt;
		&lt;h:form&gt;
			&lt;rich:dropDownMenu value="Convenio" direction="bottom-right" jointPoint="tr"&gt;
            	&lt;rich:menuItem action="#{cadastrarConvenio.redirecionarMenu}" value="cadastrar convenio"  /&gt;
				&lt;rich:menuItem action="PesquisarConvenio" value="pesquisar convenio"  /&gt;
			&lt;/rich:dropDownMenu&gt;
          
			&lt;/h:form&gt;

	&lt;/body&gt;

&lt;/html&gt;

Alguem pra ajudar… ?

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.



	&lt;rich:dropDownMenu value="Cadastro" direction="bottom-right" jointPoint="tr" &gt;
			&lt;rich:menuItem   value="Material" submitMode="client" onclick="window.open('http://hefesto:8080/bdlist/')" /&gt;
			&lt;rich:menuItem  action="CadastrarConvenio" value="cadastrar convenio"  /&gt;
		   	&lt;rich:menuItem action="CadastrarFornecedor" value="cadastrar fornecedor"/&gt;
		   	&lt;rich:menuItem action="CadastrarNotaFiscal" value="cadastrar nota fiscal"/&gt;
		   	&lt;rich:menuItem action="CadastrarDeprecicao" value="Depereciacao"/&gt;
		   	
		   	
			 &lt;/rich:dropDownMenu&gt;
          &lt;rich:dropDownMenu value="Consulta" direction="bottom-right" jointPoint="tr" &gt;
            &lt;rich:menuItem  action="PesquisarConvenio" value="consultar convenio"  /&gt;
            &lt;rich:menuItem  action="PesquisarFornecedor" value="consultar fornecedor"  /&gt;
            &lt;rich:menuItem action="PesquisarNotaFiscal" value="pesquisar nota fiscal"/&gt;
		   	
          &lt;/rich:dropDownMenu&gt;
          
          &lt;rich:dropDownMenu value="Patrimonio" direction="bottom-right" jointPoint="tr" &gt;
           
          &lt;rich:menuItem action="PesquisarPatrimonio" value="Patrimonio Cadastrado"/&gt;
          
          &lt;rich:menuItem action="PesquisarPatrimonioNaoCadastrado" value="Patrimonio Não Cadastrado"/&gt;
          
		  &lt;/rich:dropDownMenu&gt;
		  
		  &lt;rich:dropDownMenu value="Relatorios" direction="bottom-right" jointPoint="tr" &gt;
		  
		  &lt;/rich:dropDownMenu&gt;
           
          &lt;h:commandLink value="Sair" action="#{loginMBean.sair}" onclick="return confirm('Deseja realmente sair da aplicação?')" styleClass="sair" style="margin-left:6px;"/&gt;
          

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 ?