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类型转换(二)”。