[Logo] Mentawai Forum - Mentawai Web Framework
  [Search] Search   [Recent Topics] Recent Topics   [Members]  Member Listing   [Groups] Back to home page 
[Register] Register / 
[Login] Login 
Dúvida sobre StickAction  XML
Forum Index -> Comentários Gerais Go to Page: Previous  1, 2
Author Message
IceW0lf


[Avatar]

Joined: 16/03/2006 08:33:38
Messages: 1546
Location: Brasília
Offline

Resultado do teste acima referido:

O que foi feito.

- Coloquei o filter(new OutputFilter()); no ApplicationManager.

Com isso - se não estou enganado - ele vai pegar o que vier de formulario e setar no output. Certo ?

Quando eu retorno a página ele imprime tudinho sem problemas que está na stick ? ou que veio do form ? acho que o q veio dos forms.

Mas ao validar usando o meu ClientValidationFilter e retornando que o campo X não foi preenchido ele perde o output correto ? Por isso vem null.

Solução é session mesmo pelo que to vendo. Já que sempre que eu validar os dados o output fica null.

Leiber Wallace
Voixy ::: Soluções em Telecomunicações
saoj



Joined: 01/07/2005 09:59:17
Messages: 2846
Location: Rio de Janeiro, RJ
Offline


Temporariamente, até a gente implementar aquela opção lá, vc pode fazer um filtro que pega da sticky action e joga no output.

Coloca esse filtro ANTES do filtro de validação que o problema vai estar resolvido.

Sergio Oliveira

IceW0lf


[Avatar]

Joined: 16/03/2006 08:33:38
Messages: 1546
Location: Brasília
Offline

Seria algo mais ou menos assim ?????

Code:
 public class StickFilter extends BaseAction implements Filter {
 
 	private ClientPersonVO stickperson;
 
 	public StickFilter() {}
 
     public String filter(InvocationChain chain) throws Exception {
 	       Action action = chain.getAction();
 	       Input input = action.getInput();
 	       Output output = action.getOutput();
 
 	       ClientPersonVO c = getStickperson();
 	       output.setValue("clientPerson", c);
 	       return chain.invoke();
     }
 
     private ClientPersonVO getStickperson() {
         if (stickperson == null) {
         	stickperson = new ClientPersonVO();
             adhere();
         }
         return stickperson;
     }
 
 	public void destroy() {
 		// TODO Auto-generated method stub
 
 	}
 
 	public String execute() throws Exception {
 		// TODO Auto-generated method stub
 		return null;
 	}
 
 }
 
 


Acho que está errado esse filtro...

Leiber Wallace
Voixy ::: Soluções em Telecomunicações
saoj



Joined: 01/07/2005 09:59:17
Messages: 2846
Location: Rio de Janeiro, RJ
Offline

Lê a documentação sobre filtros.

Um filtro não tem nada haver com action. São coisas totalmente diferentes!

Filtro é uma coisa muito ridícula de se fazer. Vê lá a documentação!

http://www.mentaframework.org/filters.jsp




Sergio Oliveira

saoj



Joined: 01/07/2005 09:59:17
Messages: 2846
Location: Rio de Janeiro, RJ
Offline


Pega a sua action, dá um cast para o tipo dela, pega o que vc quer dela, e coloca no output.

Segue o exemplo abaixo:

Code:
 
 import org.mentawai.core.*;
 
 public class MyFilter implements Filter {
 	
     public String filter(InvocationChain chain) throws Exception {
         Action action = chain.getAction();
         Output output = action.getOutput();
         output.setValue("before", "doing something before!");
         String result = chain.invoke();
         output.setValue("after", "doing something after!");
         return result;
     }
     
     public void destroy() { }
 }
 	

Sergio Oliveira

IceW0lf


[Avatar]

Joined: 16/03/2006 08:33:38
Messages: 1546
Location: Brasília
Offline

O filtro eu saquei como fazer sim... a forma simples que vc fez funfa certinho fiz assim... mandei uma data pra ver... etc... na boa

SAOJ wrote:
vc pode fazer um filtro que pega da sticky action e joga no output.  


Como que eu pego da sticky action se ela está "embutida" na Action" ?

O lance que eu nao sei como é como dar getStickclient() pra poder colocar no output.

Leiber Wallace
Voixy ::: Soluções em Telecomunicações
saoj



Joined: 01/07/2005 09:59:17
Messages: 2846
Location: Rio de Janeiro, RJ
Offline

Dentro do filtro vc pega sua action e faz um cast.

Code:
 
 Action a = chain.getAction();
 
 MyAction myAction = (MyAction) a;
 
 output.setValue("carrinhoDeCompra", myAction.getCarrinhoDeCompra);
 
 return chain.invoke();
 
 


Não dá para usar o OutputFilter porque esse carinha é feito para ser executado APOS a execução da action e não antes.

Sergio Oliveira

IceW0lf


[Avatar]

Joined: 16/03/2006 08:33:38
Messages: 1546
Location: Brasília
Offline

Ahhhhhhh agora eu capitei a vossa mensagem amado guru!

Era literalmente pegar a MinhaAction.... putzzzz... Eu lia isso e entendia outra coisa putz grila malzzzz....

Fiz um pequeno teste e realmente funciona perfeitamente, amanha faço uns testes mais precisos e se estiver ok mesmo eu "posto" aki a informando o que foi feito pra que os futuros usuarios possam ter acesso.

Obrigado guru!

Leiber Wallace
Voixy ::: Soluções em Telecomunicações
IceW0lf


[Avatar]

Joined: 16/03/2006 08:33:38
Messages: 1546
Location: Brasília
Offline

Segue o procedimento para que possamos pegar a StickyAction e manda-la para o output para que possamos imprimir os dados persistidos.

MinhaAction --> Utilizando Validatable para validar formulários.

Code:
 public class ClientAction extends BaseAction implements Validatable {
 
 private ClientVO clientstick; 
 
     public ClientVO getClientstick() {
         if (clientstick== null) {
         	clientstick= new ClientVO ();
             adhere();
         }
         return clientstick;
     }
 
 /*
      * um metodo qualquer que tenha na sua action
      * */
     public String searchToAddClient() throws Exception {
 
         clientList = clientService.findToAdd(no_cliente);
 
         if (clientList!=null && clientList.size()>0) {
         //Opa encontramos gente com nome parecido ou igual, vamos apresentar na tela 
         	output.setValue("clientList", clientList);
         	return ERRORCLIENT;
         } else {
         	ClientVO c = getStickclient();
         	c.setNo_cliente(no_cliente);
         	c.setNo_email(no_email);
         	return SUCCESS;
         }
     }
 
      public String getNo_cliente_pai() {
          return no_cliente;
      }
      
      public void setNo_cliente_pai(String no_cliente) {
          this.no_cliente = no_cliente;
      }
 
     public void initValidator(Validator val, String innerAction) {
          //as validações
     }
 
 }
 


ApplicationManager
Code:
 
     public void loadActions() {
 
          action("/Client", ClientAction.class)
                .on(ClientAction.ERRORCLIENT, fwd("paginaParaExibirClientesEncontrados.jsp"))
        	.on(ClientAction.SUCCESS, fwd("paginaDeCadastrarClientes.jsp"))
 
 //Apos todas as minhas action... bla bla bla
          .filter(new StickClientFilter())
          .addFilter(new VOFilter(ClientVO.class, "client"))
          //Validator --> Este filtro deve estar sempre atrás do outros filtros sticky caso contrário não funcionará.
         .filter(new ValidatorFilter())    
       }
 


StickClientFiltro

Code:
 public class StickClientFilter implements Filter {
 
 	public StickClientFilter () {}
 
 	public String filter(InvocationChain chain) throws Exception {
         Action action = chain.getAction();
         Output output = action.getOutput();
         Action a = chain.getAction();
         ClientAction myAction = (ClientAction) a;
         output.setValue("stickclient", myAction.getStickclient());
         return chain.invoke();
     }
 
 	public void destroy() {}
 
 }
 


Com isso além de persistir os dados da sua sticky vc poderá imprimir em qualquer uma das telas seguintes, qualquer dado armazenado na sua sticky action.

Ou seja... se o seu cadastro tiver 10 telas e a cada etapa vc quizer imprimir qualquer informação de qualquer tela anterior vc poderá.

Lembrando que ao final de todo o processo, após salvar a informação vc deve dar um disjoin() na sua stick.

Acho que é isso... qualquer dúvida estamos ai.

Sérgio, estarei no aguardo sobre a possibilidade de isso já ficar implicito nas proximas versões.

Obrigado e parabéns pela paciência, como todos dizem... tu num dorme nao ? Abraço.

Leiber Wallace
Voixy ::: Soluções em Telecomunicações
 
Forum Index -> Comentários Gerais Go to Page: Previous  1, 2
Go to:   
Powered by JForum 2.1.6 © JForum Team