[Logo] Mentawai Forum - Mentawai Web Framework
  [Search] Search   [Recent Topics] Recent Topics   [Members]  Member Listing   [Groups] Back to home page 
[Register] Register / 
[Login] Login 

Forum Read-Only! Check the new site and forum here!

20) POJO Actions (Se vc por alguma razão não quizer/puder estender/implementar Action!)  XML
Forum Index -> F.A.Q.
Author Message
saoj



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

O Mentawai suporta POJO actions de uma maneira extramamente simples e completa, permitindo que seja feita uma chamada direta a qualquer método de um POJO (plain old Java Object), sem que esse POJO extenda BaseAction ou implemente Action.

Para a escolha dos parâmetros que irão ser passados para o método, o Controller escolhe o primeiro valor do input da action que seja compatível com o parametro do método.

compatível = Valor é uma instancia da classe do parâmetro OU Valor pode ser convertido para a classe do parâmetro (Ex: String para int, long, java.util.Date, etc.)

Importante notar que os valores do input da action são ordenados alfabeticamente, ou seja, os valores do input da action são testados em ordem alfabética até que um seja compatível com o parametro do método do POJO.

Caso vc queira ou necessite, principalmente se o input da action possuir muitos valores diferentes, o que pode levar a uma escolha de um valor errado pelo controlador, tudo que vc tem que fazer é utilizar o MethodParamFilter e indicar explicitamente quais valores serão testados e em que ordem.

Abaixo temos vários exemplos de como utilizar uma Pojo Action do Mentawai. Note que sua action não ficará atrelada a qualquer tipo de annotation ou a qualquer coisa relativa ao framework Mentawai. Caso vc queira, e somente por uma opção sua e não por uma exigência do framework, vc poderá obter a action de dentro do seu pojo utilizando o método PojoAction.getAction().

(Clique aqui para baixar o WAR completo do exemplo abaixo!)

Pojo action:

Code:
 
 package hello;
 
 import org.mentawai.core.Action;
 import org.mentawai.core.Input;
 import org.mentawai.core.PojoAction;
 
 public class HelloPojo {
 	
 	private String value;
 	
 	public void execute() {
 		
 		value = "hello from execute!";
 
                 // se o método é void, return SUCCESS é assumido, a não ser que uma exception seja jogada, é claro...
 		
 	}
 	
 	public String sayHi() {
 		
 		value = "saying hi!";
 		
 		return "success";
 
                // se esse método retornar qualquer coisa que não seja uma String, toString() será chamado... 
               // se retornar null então o resultado "NULL" será retornado...
 	}
 	
 	public String forceError() {
 		
 		return "error";
 	}
 	
 	// This will be accessed by OutputFilter and placed in the action output...
 	public String getValueToShow() {
 		
 		return value;
 	}
 
 	public void addTwoNumbers(int number1, int number2) {
 		
 		value = "Result1: " + String.valueOf(number1 + number2) + " / number1=" + number1 + " / number2=" + number2;
 
                 // return "SUCCESS" assumed...
 		
 	}
 
 	public void addTwoNumbers(Numbers numbers) {
 		
 		value = "Result2: " + String.valueOf(numbers.x + numbers.y);
 		
 	}
 	
 	public void addTwoNumbers2(int x, String y) {
 		
 		value = "Result3: x=" + String.valueOf(x) + " / y=" + y;
 	}
 	
 	public void addTwoNumbers3(String y, int x) {
 		
 		value = "Result4: x=" + String.valueOf(x) + " / y=" + y;
 		
 	}
 	
 	public void addTwoNumbers4(Numbers numbers) {
 		
 		addTwoNumbers(numbers);
 	}
 	
 	public String testAction() {
 
                 // se vc for fazer isso aqui embaixo, provavelmente é 
                 //melhor que vc estenda BaseAction, pois vc vai está
                 // acoplando o seu pojo ao framework Mentawai....
 		
 		Action a = PojoAction.getAction();
 		
 		Input input = a.getInput();
 		
 		int x = input.getIntValue("x");
 		
 		int y = input.getIntValue("y");
 		
 		
 		value = "Result3: " + String.valueOf(x + y);
 		
 		return Action.SUCCESS;
 		
 		
 	}
 	
 }
 
 // caso vc queira usar um VO para facilitar a escolha dos parametros
 
 package hello;
 
 public class Numbers {
 	
 	int x;
 	
 	int y;
 	
 	public String toString() {
 		
 		return "x=" + x + " y=" + y;
 		
 	}
 }
 


ApplicationManager.java:

Code:
 import hello.HelloPojo;
 import hello.Numbers;
 
 import org.mentawai.filter.OutputFilter;
 import org.mentawai.filter.VOFilter;
 import org.mentawai.filter.MethodParamFilter;
 
 public class ApplicationManager extends org.mentawai.core.ApplicationManager {
 	
 	@Override
 	public void loadActions() {
 		
 		action(HelloPojo.class) // HelloPojo.mtw
 			.on(SUCCESS, fwd("/showValue.jsp"))
 			.on(ERROR, redir("/error.jsp"))
 			.filter(new OutputFilter())
 			.filter(new VOFilter("numbers", Numbers.class));
 		
 		action("/HelloPojoParams", HelloPojo.class) // To test MethodParamFilter...
 			.on(SUCCESS, fwd("/showValue.jsp"))
 			.on(ERROR, redir("/error.jsp"))
 			.filter(new OutputFilter())
 			.filter(new MethodParamFilter("x", "y"));
 		
 		
 	}
 }
 


Algumas chamadas de teste que vc pode fazer:

Code:
 <html>
 <h1>Pojo Actions Examples</h1>
 
 <font face="verdana" size="3">
 <a href="/PojoActions/HelloPojo.mtw" target="_blank">
 /PojoActions/HelloPojo.mtw</a>
 <br><br>
 <a href="/PojoActions/HelloPojo.sayHi.mtw" target="_blank">
 /PojoActions/HelloPojo.sayHi.mtw</a>
 <br><br>
 <a href="/PojoActions/HelloPojo.forceError.mtw" target="_blank">
 /PojoActions/HelloPojo.forceError.mtw</a>
 <br><br>
 <a href="/PojoActions/HelloPojo.addTwoNumbers.mtw?x=32&y=2" target="_blank">
 /PojoActions/HelloPojo.addTwoNumbers.mtw?x=32&y=2</a>
 <br><br>
 <a href="/PojoActions/HelloPojo.addTwoNumbers.mtw?y=1&x=33" target="_blank">
 PojoActions/HelloPojo.addTwoNumbers.mtw?y=1&x=33</a>
 <br><br>
 <a href="/PojoActions/HelloPojo.testAction.mtw?x=32&y=2" target="_blank">
 /PojoActions/HelloPojo.testAction.mtw?x=32&y=2</a>
 <br><br>
 <a href="/PojoActions/HelloPojo.addTwoNumbers2.mtw?x=32&y=2" target="_blank">
 /PojoActions/HelloPojo.addTwoNumbers2.mtw?x=32&y=2</a>
 <br><br>
 <a href="/PojoActions/HelloPojo.addTwoNumbers3.mtw?x=32&y=2" target="_blank">
 /PojoActions/HelloPojo.addTwoNumbers3.mtw?x=32&y=2</a>
 <br><br>
 <a href="/PojoActions/HelloPojo.addTwoNumbers4.mtw?x=32&y=2" target="_blank">
 /PojoActions/HelloPojo.addTwoNumbers4.mtw?x=32&y=2</a>
 <br><br>
 <a href="/PojoActions/HelloPojoParams.addTwoNumbers.mtw?a=11&y=3&b=22&sergio=aaa&x=32&xx=0" target="_blank">
 /PojoActions/HelloPojoParams.addTwoNumbers.mtw?a=11&y=3&b=22&sergio=aaa&x=32&xx=0</a>
 </html>
 
 



Sergio Oliveira

 
Forum Index -> F.A.Q.
Go to:   
Powered by JForum 2.1.6 © JForum Team