Struts2类型转换(三)-类型转换与复杂属性的配合使用

一、类型转换与复杂属性配合使用

示例图示:form 标签的 name 属性可以被映射到一个属性的属性

1)JSP页面主要代码如下:

1 <s:form action="testComplextProperty">
2     <s:textfield name="deptName" label="DeptName"></s:textfield>
3     <!-- 映射属性的属性 -->
4     <s:textfield name="mgr.name" label="MgrName"></s:textfield>
5     <s:textfield name="mgr.birth" label="MgrBirth"></s:textfield>
6     <s:submit></s:submit>
7 </s:form>

2)Java代码如下:

 1 //Manager类
 2 package com.atguigu.struts2.model;
 3 import java.util.Date;
 4 public class Manager {
 5     private String name;
 6     private Date birth;
 7     public String getName() {
 8         return name;
 9     }
10     public void setName(String name) {
11         this.name = name;
12     }
13     public Date getBirth() {
14         return birth;
15     }
16     public void setBirth(Date birth) {
17         this.birth = birth;
18     }
19     @Override
20     public String toString() {
21         return "Manager [name=" + name + ", birth=" + birth + "]";
22     }
23 }
24 
25 //Department类
26 /**
27  * 1. Department 是模型, 实际录入的 Department. deptName 可以直接写到
28  * s:textfield 的 name 属性中. 那 mgr 属性如何处理呢 ?
29  * 
30  * struts2 表单标签的 name 值可以被赋为属性的属性: name=mgr.name, name=mgr.birth
31  * 
32  * 2. mgr 中有一个 Date 类型的 birth 属性, Struts2 可以完成自动的类型转换吗 ?
33  * 
34  * 全局的类型转换器可以正常工作!
35  *
36  */
37 
38 public class Department {
39     private Integer id;
40     private String deptName;
41     private Manager mgr;
42     public Integer getId() {
43         return id;
44     }
45     public void setId(Integer id) {
46         this.id = id;
47     }
48     public String getDeptName() {
49         return deptName;
50     }
51     public void setDeptName(String deptName) {
52         this.deptName = deptName;
53     }
54     public Manager getMgr() {
55         return mgr;
56     }
57 
58     public void setMgr(Manager mgr) {
59         this.mgr = mgr;
60     }
61     @Override
62     public String toString() {
63         return "Department [id=" + id + ", deptName=" + deptName + ", mgr="
64                 + mgr + "]";
65     }
66 }
67 
68 //Action代码,Action实现了ModelDriven接口
69 package com.atguigu.struts2.app;
70 import com.atguigu.struts2.model.Department;
71 import com.opensymphony.xwork2.ActionSupport;
72 import com.opensymphony.xwork2.ModelDriven;
73 public class TestComplextPropertyAction extends ActionSupport 
74     implements ModelDriven<Department>{
75     @Override
76     public String execute() throws Exception {
77         System.out.println(department);
78         return SUCCESS;
79     }    
80     private Department department;
81     @Override
82     public Department getModel() {
83         department = new Department();
84         return department;
85     }    
86 }

3)struts.xml的基本配置如下:

<action name="testComplextProperty" class="com.atguigu.struts2.app.TestComplextPropertyAction">
    <result>/success.jsp</result>
</action>

4)所使用的字符串与java.util.Date类型的转换器及配置同“Struts2类型转换(二)”。

二、类型转换与 Collection 配合使用

Struts 还允许填充 Collection 里的对象, 这常见于需要快速录入批量数据的场合

 示例图示:

1)JSP页面主要代码如下:

 1 <head>
 2 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 3 <title>Insert title here</title>
 4 <script type="text/javascript" src="scripts/jquery-1.4.2.js"></script>
 5 <script type="text/javascript">
 6     $(function(){        
 7         var count = 0;        
 8         $("#add").click(function(){
 9             count++;            
10             $("#button").before("<tr><td>Mgrs[" + count + "].Name:</td><td><input name='mgrs[" + count + "].name'/></td></tr>")
11                         .before("<tr><td>Mgrs[" + count + "].Birth:</td><td><input name='mgrs[" + count + "].birth'/></td></tr>");            
12             return false;        
13         });        
14         $("#remove").click(function(){
15             count--;        
16             $("#button").prev("tr").remove();
17             $("#button").prev("tr").remove();            
18             return false;        
19         });        
20     });    
21 </script>
22 </head>
23 <body>    
24     <form action="testConversion2.action">    
25         <table>        
26             <tbody>                
27                 <tr>
28                     <td>Mgrs[0].Name:</td>
29                     <td><input name="mgrs[0].name"/></td>
30                 </tr>                
31                 <tr>
32                     <td>Mgrs[0].Birth:</td>
33                     <td><input name="mgrs[0].birth"/></td>
34                 </tr>                
35                 <tr id="button">
36                     <td><button id="add">新加一个</button></td>
37                     <td><button id="remove">删除一个</button></td>
38                 </tr>                
39                 <tr>
40                     <td colspan="2" align="right">
41                         <input type="submit" value="Submit"/>
42                     </td>
43                 </tr>            
44             </tbody>            
45         </table>        
46     </form>    
47 </body>

JSP页面运行结果如下图,可以动态的添加或删除一组Mgrs表单。

2)Java代码如下:

 1 package com.atguigu.struts2.app;
 2 import java.util.Collection;
 3 import com.atguigu.struts2.model.Manager;
 4 import com.opensymphony.xwork2.ActionSupport;
 5 public class TestCollectionAction extends ActionSupport {
 6     private Collection<Manager> mgrs = null;    
 7     public Collection<Manager> getMgrs() {
 8         return mgrs;
 9     }
10     public void setMgrs(Collection<Manager> mgrs) {
11         this.mgrs = mgrs;
12     }
13     public String execute() throws Exception {
14         System.out.println(mgrs);
15         return SUCCESS;
16     }
17 }

3)struts.xml的基本配置如下:

<action name="testConversion2" class="com.atguigu.struts2.app.TestCollectionAction">
    <result>/success.jsp</result>
</action>

4)所使用的字符串与java.util.Date类型的转换器及配置同“Struts2类型转换(二)”。

posted @ 2014-08-21 14:10  KnightKitt  阅读(496)  评论(0编辑  收藏  举报