在struts2框架中關於Action處理請求參數有兩種方案(三個方式),表單屬性的名稱應該和在Action類中定義的成員屬性或者在JavaBean中定義的成員屬性名稱一樣:
1、屬性驅動
1)直接在Action類中定義成員屬性來接收請求參數 (將Action當成javaBean),在Action中還需要定義成員屬性的setter方法。
表單信息:
1 <form action="${pageContext.servletContext.contextPath}/testAction.action"> 2 name:<input type="text" name="name"><br> 3 password:<input type="password" name="password"><br> 4 <input type="submit" value="提交"> 5 </form>
Action類:
1 public class TestAction { 2 private String name; 3 private String password; 4 5 public String getName() { 6 return name; 7 } 8 9 public void setName(String name) { 10 this.name = name; 11 } 12 13 public String getPassword() { 14 return password; 15 } 16 17 public void setPassword(String password) { 18 this.password = password; 19 } 20 21 public String execute() { 22 System.out.println("name: " + name); 23 System.out.println("password: " + password); 24 return "success"; 25 } 26 }
前台輸入信息:
后台顯示結果:
2)直接將javaBean做為Action的屬性,在頁面上必須使用ognl表達式來描述組件的name屬性
1 username:<input type="text" name="user.username"><br>
JavaBean:
1 public class Person { 2 private String name; 3 private String password; 4 5 public String getName() { 6 return name; 7 } 8 public void setName(String name) { 9 this.name = name; 10 } 11 public String getPassword() { 12 return password; 13 } 14 public void setPassword(String password) { 15 this.password = password; 16 } 17 }
表單信息:
1 <form action="${pageContext.servletContext.contextPath}/testAction.action"> 2 name:<input type="text" name="person.name"><br> 3 password:<input type="password" name="person.password"><br> 4 <input type="submit" value="提交"> 5 </form>
Action:
1 public class TestAction { 2 private Person person; 3 4 public Person getPerson() { 5 return person; 6 } 7 8 public void setPerson(Person person) { 9 this.person = person; 10 } 11 12 public String execute() { 13 System.out.println("name: " + person.getName()); 14 System.out.println("password: " + person.getPassword()); 15 return "success"; 16 } 17 }
前台輸入信息:
后台顯示結果:
這種方式是通過name="params"的攔截器實現參數封裝的。
1 <interceptor name="params" class="com.opensymphony.xwork2.interceptor.ParametersInterceptor"/>
2、模型驅動
模型驅動處理請求參數的步驟為:
步驟:
- 1.Action必須實現ModelDriven接口
- 2.重寫getModel()方法,返回一個javaBean對象.
- 3.實例化一個javaBean對象.
JavaBean:
1 public class Person { 2 private String name; 3 private String password; 4 public String getName() { 5 return name; 6 } 7 public void setName(String name) { 8 this.name = name; 9 } 10 public String getPassword() { 11 return password; 12 } 13 public void setPassword(String password) { 14 this.password = password; 15 } 16 }
表單信息:
1 <form action="${pageContext.servletContext.contextPath}/testAction.action"> 2 name:<input type="text" name="name"><br> 3 password:<input type="password" name="password"><br> 4 <input type="submit" value="提交"> 5 </form>
Action:
1 public class TestAction implements ModelDriven { 2 private Person person = new Person(); 3 4 public Person getPerson() { 5 return person; 6 } 7 8 public void setPerson(Person person) { 9 this.person = person; 10 } 11 12 public String execute() { 13 System.out.println("name: " + person.getName()); 14 System.out.println("password: " + person.getPassword()); 15 return "success"; 16 } 17 18 @Override 19 public Object getModel() { 20 return person; 21 } 22 }
前台輸入信息:
后台顯示結果:
4、封裝數據到Collection或數組
JavaBean:
1 public class Person { 2 private String name; 3 private String password; 4 public String getName() { 5 return name; 6 } 7 public void setName(String name) { 8 this.name = name; 9 } 10 public String getPassword() { 11 return password; 12 } 13 public void setPassword(String password) { 14 this.password = password; 15 } 16 }
表單信息:
1 <form action="${pageContext.servletContext.contextPath}/testAction.action"> 2 name1:<input type="text" name="list[0].name"><br> 3 password1:<input type="password" name="list[0].password"><hr> 4 name2:<input type="text" name="list[1].name"><br> 5 password2:<input type="password" name="list[1].password"><br> 6 <input type="submit" value="提交"> 7 </form>
Action:
1 public class TestAction { 2 private List<Person> list; 3 4 public List<Person> getList() { 5 return list; 6 } 7 8 public void setList(List<Person> list) { 9 this.list = list; 10 } 11 12 public String execute() { 13 System.out.println("name1: " + list.get(0).getName()); 14 System.out.println("password1: " + list.get(0).getPassword()); 15 System.out.println("name2: " + list.get(1).getName()); 16 System.out.println("password2: " + list.get(1).getPassword()); 17 return "success"; 18 } 19 }
前台輸入信息:
后台顯示結果:
5、封裝數據到Map
JavaBean:
1 public class Person { 2 private String name; 3 private String password; 4 public String getName() { 5 return name; 6 } 7 public void setName(String name) { 8 this.name = name; 9 } 10 public String getPassword() { 11 return password; 12 } 13 public void setPassword(String password) { 14 this.password = password; 15 } 16 }
表單信息:
1 <form action="${pageContext.servletContext.contextPath}/testAction.action"> 2 name1:<input type="text" name="map['one'].name"><br> 3 password1:<input type="password" name="map['one'].password"><hr> 4 name2:<input type="text" name="map['two'].name"><br> 5 password2:<input type="password" name="map['two'].password"><br> 6 <input type="submit" value="提交"> 7 </form>
Action:
public class TestAction { private Map<String, Person> map; public Map<String, Person> getMap() { return map; } public void setMap(Map<String, Person> map) { this.map = map; } public String execute() { System.out.println("name1: " + map.get("one").getName()); System.out.println("password1: " + map.get("one").getPassword()); System.out.println("name2: " + map.get("two").getName()); System.out.println("password2: " + map.get("two").getPassword()); return "success"; } }
前台輸入信息:
后台顯示結果: