[原创]java WEB学习笔记68:Struts2 学习之路-- 类型转换与复杂属性配合使用
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用
内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系。
本人互联网技术爱好者,互联网技术发烧友
微博:伊直都在0221
QQ:951226918
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 package com.jason.struts2.model; 2 3 import java.util.Date; 4 5 6 7 /* 8 * 9 * 10 * */ 11 public class Manager { 12 13 private String name; 14 private Date birth; 15 16 public String getName() { 17 return name; 18 } 19 20 public void setName(String name) { 21 this.name = name; 22 } 23 24 public Date getBirth() { 25 return birth; 26 } 27 28 public void setBirth(Date birth) { 29 this.birth = birth; 30 } 31 32 @Override 33 public String toString() { 34 return "Manager [name=" + name + "]"; 35 } 36 37 }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 package com.jason.struts2.model; 2 3 4 5 /* 6 * 1.Department 是模型,实际录入的Department, deptName, 可以直接写入;manager 属性的处理? 7 * Struts2 表单标签的name 值可以被赋为属性的属性:name=manager.name / name=manager.birth 8 * 9 * 3.manager 中有一个Date 类型的birth 属性,Struts2 是否能完成自动的转换? 10 * 11 * 全局的类型转换器可以正常工作 12 * 13 * */ 14 public class Department { 15 private Integer id; 16 private String deptName; 17 18 private Manager manager; 19 20 public Integer getId() { 21 return id; 22 } 23 24 public void setId(Integer id) { 25 this.id = id; 26 } 27 28 public String getDeptName() { 29 return deptName; 30 } 31 32 public void setDeptName(String deptName) { 33 this.deptName = deptName; 34 } 35 36 public Manager getManager() { 37 return manager; 38 } 39 40 public void setManager(Manager manager) { 41 this.manager = manager; 42 } 43 44 @Override 45 public String toString() { 46 return "Department [id=" + id + ", deptName=" + deptName + ", manager=" 47 + manager + "]"; 48 } 49 50 }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 package com.jason.struts2.model; 2 3 import com.opensymphony.xwork2.ActionSupport; 4 import com.opensymphony.xwork2.ModelDriven; 5 6 public class TestComplexPropertyAction extends ActionSupport implements ModelDriven<Department>{ 7 8 /** 9 * @Fields:serialVersionUID 10 */ 11 private static final long serialVersionUID = 1L; 12 private Department department; 13 14 @Override 15 public Department getModel() { 16 department = new Department(); 17 return department; 18 } 19 20 @Override 21 public String execute() throws Exception { 22 System.out.println(department); 23 return "success"; 24 } 25 26 27 28 }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 package com.jason.strut2.conversion; 2 3 import java.text.DateFormat; 4 import java.text.ParseException; 5 import java.text.SimpleDateFormat; 6 import java.util.Date; 7 import java.util.Map; 8 9 import javax.servlet.ServletContext; 10 import javax.xml.crypto.Data; 11 12 import org.apache.struts2.ServletActionContext; 13 import org.apache.struts2.util.StrutsTypeConverter; 14 15 import com.opensymphony.xwork2.ActionContext; 16 import com.sun.jndi.url.dns.dnsURLContext; 17 18 public class DateConverter extends StrutsTypeConverter { 19 20 private DateFormat dateFormat; 21 22 public void setDateFormat(DateFormat dateFormat) { 23 //获取当前web应用下的初始化参数 24 25 ServletContext servletContext = ServletActionContext.getServletContext(); 26 String pattern = servletContext.getInitParameter("datePattern"); 27 dateFormat = new SimpleDateFormat(pattern); 28 29 } 30 31 public DateFormat getDateFormat() { 32 return dateFormat; 33 } 34 35 @Override 36 public Object convertFromString(Map context, String[] values, Class toClass) { 37 38 System.out.println("convertFromString ... "); 39 if(toClass == Data.class){ 40 if(values != null && values.length > 0){ 41 String value = values[0]; 42 try { 43 return getDateFormat().parseObject(value); 44 } catch (ParseException e) { 45 46 e.printStackTrace(); 47 } 48 } 49 } 50 //若没有转换成功,则返回values 51 return values; 52 } 53 54 @Override 55 public String convertToString(Map context, Object o) { 56 System.out.println("convertToString ..."); 57 if( o instanceof Date){ 58 Date date = (Date) o; 59 return getDateFormat().format(date); 60 } 61 //若转换失败,则返回null 62 return null; 63 } 64 65 }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 java.util.Date=com.jason.strut2.conversion.DateConverter
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 <context-param> 2 <param-name>datePattern</param-name> 3 <param-value>yyyy-MM-dd hh:mm:ss</param-value> 4 </context-param> 5
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 <action name="testComplexPropertyAction" class="com.jason.struts2.model.TestComplexPropertyAction"> 2 <result>/success.jsp</result> 3 </action>
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <%@ taglib prefix="s" uri="/struts-tags" %> 4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 5 <html> 6 <head> 7 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 8 <title>Insert title here</title> 9 </head> 10 <body> 11 12 <s:form action="testComplexPropertyAction"> 13 <s:textfield name="deptName" label="DeptName"></s:textfield> 14 <!-- 映射属性的属性 --> 15 <s:textfield name="manager.name" label="ManagerName"></s:textfield> 16 <s:textfield name="manager.birth" label="ManagerBirth"></s:textfield> 17 18 <s:submit></s:submit> 19 </s:form> 20 21 </body> 22 </html>
核心点:
1.struts 的表单标签支持:映射属性的属性
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 <s:form action="testComplexPropertyAction"> 2 <s:textfield name="deptName" label="DeptName"></s:textfield> 3 <!-- 映射属性的属性 --> 4 <s:textfield name="manager.name" label="ManagerName"></s:textfield> 5 <s:textfield name="manager.birth" label="ManagerBirth"></s:textfield> 6 7 <s:submit></s:submit> 8 </s:form>
2.通过配置全局的:类型转换类,和配置。进行类型自动的转换
xwork-conversion.properties
1 java.util.Date=com.jason.strut2.conversion.DateConverter