Menu do Richfaces não está redirecionando as paginas

23 respostas
EuclidesFilizola

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 ?

23 Respostas

viniciusfaleiro

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…

EuclidesFilizola

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. ?

EuclidesFilizola

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

viniciusfaleiro

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...

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

    }
H

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.

EuclidesFilizola

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;

H

Está funcionando agora?

EuclidesFilizola

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…

H

Você ja experimentou usar o debug e ver se está chegando nos métodos que eu te passei?

EuclidesFilizola

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;
H

Só mais uma coisa, se não for pedir muito. Coloca o trecho do código do menu onde você chama a sua action.

EuclidesFilizola

é este:

!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&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;
EuclidesFilizola

Alguem pra ajudar… ?

F

E ai cara, conseguiu resolver o problema?

EuclidesFilizola

consegui sim mano.

Há muito tempo já.

Você está com esse problema é. ?

Se quiser, posto os códigos aqui.

F

Estou com o mesmo problema, por favor poderia postar o codigo?

Grato.

EuclidesFilizola

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;
F

Ainda não esta funcionando…

Poderia postar o seu MB?

EuclidesFilizola

Eu preciso saber, oq que acontece no seu menu ?

você clica em alguma opção e não faz nada, é isso ?

F

Isso exatamente segue o meu xhtml:

<rich:dropDownMenu>
                    <f:facet name="label">
                        <h:panelGroup>
                            <h:outputText value="Cadastro/Consulta"/>
                        </h:panelGroup>
                    </f:facet>
                    <rich:menuGroup value="Evento">
                        <rich:menuItem submitMode="ajax" value="Evento US" action="ListarEventos"/>
                    </rich:menuGroup>
                    <rich:menuSeparator id="menuSeparator8">
                        <rich:componentControl for="panel" attachTo="link" operation="show" event="onclick"/>
                    </rich:menuSeparator>
                    <rich:menuItem submitMode="ajax" value="Logout"/>
                </rich:dropDownMenu>

E meu faces-config:

<navigation-rule>
        <from-view-id>/index.xhtml</from-view-id>
        <navigation-case>
            <from-outcome>ListarEventos</from-outcome>
            <to-view-id>/listarEvento.xhtml</to-view-id>
        </navigation-case>
    </navigation-rule>
EuclidesFilizola

Só para fazer um teste,

se você trocar o view id pelo codigo abaixo:

&lt;from-view-id&gt;/index.xhtml&lt;/from-view-id&gt;

mudar para:

&lt;from-view-id&gt;*&lt;/from-view-id&gt;

e veja se funciona, só para saber se o problema está na navigation-rule.

F

Mesma coisa, quando eu clico em cima do Evento US, nada acontence.

F

Cara, ainda continuo com o mesmo problema.

Criado 8 de março de 2010
Ultima resposta 9 de ago. de 2010
Respostas 23
Participantes 4