JSF <from-action>

Olá pessoal,
eu estou precisando executar uma operação antes de ir para uma outra página
e não tem como eu chamar essa operação na minha página JSF.
Então fiz da seguinte meneira:

<navigation-rule>
        <from-view-id>/nova_solicitacao.jsp</from-view-id>
        <navigation-case>
            <from-action>#{AmostraController.novaAmostra}</from-action>
            <from-outcome>sucesso_ins</from-outcome>
            <to-view-id>/nova_amostra.jsp</to-view-id>
        </navigation-case>
</navigation-rule>

Eu tentei usar a tag from-action, mas não adiantou,
mas para falar a verade eu não sei como usa-la e nem pra
que serve essa tag do JSF, será que alguém poderia
me dar uma ajuda?

[]'s.

&lt;navigation-rule&gt;
	&lt;from-view-id&gt;suaPaginaQueChamaAacao&lt;/from-view-id&gt; 	
	&lt;navigation-case&gt;
		&lt;from-action&gt;#{TesteMB.executaMetodo}&lt;/from-action&gt;
		&lt;from-outcome&gt;ok&lt;/from-outcome&gt; // se o metodo executaMetodo retornar "ok" sera direcionado para a proxima pagina
		&lt;to-view-id&gt;paginaParaOndeIraSerRedirecionado&lt;/to-view-id&gt;
		&lt;redirect/&gt;  			
	&lt;/navigation-case&gt;
&lt;navigation-rule&gt;
public class TesteMB{
     
     public String executaOperacao(){
          // implementar a sua logica

          // se o seu metodo retornar ok como foi definido no faces-config será redirecionado 
          return "ok";
     }
}

Espero ter ajudado.

Jóia Henrique?
Mas como ficaria a página JSF,
eu testei aqui do jeito que vc me falou
mas ainda continua dando erro aqui.
Será que tem como vc ou alguém me mostrar
um exemplo de como ficaria a página JSF?

[]'s.

Explique o que você está fazendo.
Como você está chamando esse método?
Como está chamando a outra página.

Jóia Henrique?
Eu tenho uma página que possui um formulário

                     <h:form>
                            <!-- Seta o valor do idProdutor através do nome do produtor selecionado no combo -->
                            <h:selectOneMenu  styleClass="dimensao_combo" value="#{SolicitacaoController.idProdutor}">
                                <f:selectItems value="#{SolicitacaoController.produtoresCombo}" />
                            </h:selectOneMenu>                      
                            <!-- Seta o número de amostras da solicitação de serviço -->
                            <p>Número de Amostras</p>
                            <h:inputText  styleClass="dimensao_input" value="#{SolicitacaoController.solicitacaoServico.numeroAmostra}"/>
                            <!-- Seta o nome da solicitação de serviço -->
                            <p>Nome da Solicitação</p>
                            <h:inputText  styleClass="dimensao_input" value="#{SolicitacaoController.solicitacaoServico.nome}"/>
                            <h:messages />
                            <p>&nbsp;</p>
                            <!-- Cria a solicitação de serviço corrente -->
                            <h:commandButton value="Avançar" action="#{SolicitacaoController.create}">
                                <!-- Seta o número de amostras no contador de AmostraController -->                                
                                <f:setPropertyActionListener target="#{AmostraController.cont}" value="#{SolicitacaoController.solicitacaoServico.numeroAmostra}"/>                                                                                                
                            </h:commandButton>
                        </h:form>

e quando eu clicar no botão avançar eu quero que ele excute a action

action="#{SolicitacaoController.create}"

e vá para a outra página e ao mesmo tempo
execute a ação:

       <navigation-case>
            <from-action>#{AmostraController.novaAmostra}</from-action>
            <from-outcome>nova_amostra</from-outcome>
            <to-view-id>/nova_amostra.jsp</to-view-id>
        </navigation-case>

antes de ir para outra página, é isso que eu estou
querendo fazer Henrique.

[]'s.

O meu método create
retorna uma string “sucesso_ins”
e a ação:

<from-action>#{AmostraController.novaAmostra}</from-action>

retorna a string “nova_amostra”.

[]'s.

Ok.

public class SolicitacaoController{

     public String create(){
           // implemente a sua lógica
           // .......
           return "nova_amostra";
     }
}

Preste atenção aqui:

&lt;navigation-case&gt;
      &lt;from-action&gt;#{SolicitacaoController.create}&lt;/from-action&gt; // nome do MenagedBean "." nome do metodo (isso é a sua action)
      &lt;from-outcome&gt;nova_amostra&lt;/from-outcome&gt; // retorno do seu método
      &lt;to-view-id&gt;/nova_amostra.jsp&lt;/to-view-id&gt; // pagina para onde irá
&lt;/navigation-case&gt;

Qualquer dúvida é só postar.

Espero ter ajudado.

[quote=ricardocomp]O meu método create
retorna uma string “sucesso_ins”
e a ação:

<from-action>#{AmostraController.novaAmostra}</from-action>

retorna a string “nova_amostra”.

[]'s.[/quote]

O seu método create tem que retornar o que você colocou no .
No seu caso “nova_amostra”.

Jóia Henrique,
eu entendi como funciona a tag ,
mas acho que o que eu preciso fazer essa tag não vai me ajudar, pois:

public class SolicitacaoController {
  public String create(){
    ...
    return "sucesso_ins";
  }
}

e na outra classe eu tenho:

public class AmostraController {
  public String novaAmostra() {
    return "nova_amostra";
  }
}

e ao clicar no botão da minha página

<h:commandButton value="Avançar" action="#{SolicitacaoController.create}">

ele teria que ir para outra página mas executar duas operações de action
teria que ser algo mais ou meno assim:

       <navigation-case>
            <from-action>#{SolicitacaoController.create}</from-action>
            <from-outcome>sucesso_ins</from-outcome>
            <to-view-id>/nova_amostra.jsp</to-view-id>
            //e depois executaria a ação
            <from-action>#{AmostraController.novaAmostra}</from-action>
        </navigation-case>

Mas pelo jeito não tem como eu fazer isso,
Será que vc Henrique ou alguém sabe se tem como
eu fazer algo do tipo?

[]'s.

Sua Action? Está chamando o método create da classe SolicitacaoController.
O que esse método faz?

&lt;h:commandButton value="Avançar" action="#{SolicitacaoController.create}"&gt;  

O que o método novaAmostra da classe AmostraController faz? Apenas retorna uma String?

Ainda não entendi. Por que não consegue fazer tudo em apenas uma action?

Henrique vc ou alguém sabe me dizer
se existe uma maneira de executar uma
operação através do faces-config principalmente
dentro da tag ?

[]'s.

Esse métodos retornam apenas String
Henrique, eu utilizo Managed-Beans diferentes
por isso não consigo executar duas ações
diferentes de managed-benas diferentes
ao mesmo tempo.

Eu precisava executar essas duas operações:

action="#{SolicitacaoController.create}"
action="#{AmostraController.novaAmostra}"

antes de ir para a outra página.

[]'s.

Então, mude o retorno no metodo create da classe SolicitacaoController.

public String create(){
     // implementa sua lógica
     
     // retorno que ira direcionar para nova_amostra.jsp
     return "nova_amostra";
}
&lt;navigation-case&gt;  
      &lt;from-action&gt;#{SolicitacaoController.create}&lt;/from-action&gt;
      &lt;from-outcome&gt;nova_amostra&lt;/from-outcome&gt; // retorno do seu método  
      &lt;to-view-id&gt;/nova_amostra.jsp&lt;/to-view-id&gt; // pagina para onde irá  
&lt;/navigation-case&gt;  

Pode ter certeza que isso funciona.

Qualquer dúvida posta ai.

Espero ter ajudado

Valeu Henrique,
Muito Obrigado pela sua ajuda,

Abraço.