struts2自定义转换器 在action中的user属性中的date数据类型的转换
问题描述:背景:有一个action实现了ModelDriver,其中有一个User2user的属性,user中里面有username属性,date属性等。date属性是D...
问题描述:背景:有一个action 实现了ModelDriver,其中 有一个User2 user的属性,user中里面有username属性,date属性等。date属性是Date型的。
问题:如何将表单中为以yyyyMMdd格式的String类型的date属性字符串转换为Date类型(不采用直接转换User2的方法 转换器中只转换Date)
我是感觉这么转换的,但是没有成功 希望懂的筒子给我点建议
以下是所有代码描述:
实体类:
User2:
package com.entity;
import java.text.SimpleDateFormat;
import java.util.Date;
public class User2 {
private String username ;
private String password ;
private Date date ;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
@Override
public String toString() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
return "User2 [username=" + username + ", password=" + password
+ ", date=" + sdf.format(date) + "]";
}
public User2(String username, String password, Date date) {
super();
this.username = username;
this.password = password;
this.date = date;
}
public User2() {
super();
// TODO Auto-generated constructor stub
}
}
--------------------------------------------------------------------------------------------------
action:
package com.converter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
import com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter;
public class dateConverter extends DefaultTypeConverter {
@Override
public Object convertValue(Map<String, Object> context, Object value,
Class toType) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
if(toType == Date.class){//String 转 Date
String [] values = (String [])value;
try {
Date date = sdf.parse(values[0]);
System.out.println("convetr--装换日期todate");
return date;
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
else if(toType == String.class){// Date 转String
Date date = (Date) value;
System.out.println("convetr--显示日期toString");
return date.toLocaleString();
}
return null;
}
}
-------------------------------------------------------------------------------------------
HandleLogin2-conversion.properties:
date=com.converter.dateConverter//关于此处 不知有没有写对 是否该用user.date但是试过好像不行
------------------------------------------------------------------------------------------ 展开
问题:如何将表单中为以yyyyMMdd格式的String类型的date属性字符串转换为Date类型(不采用直接转换User2的方法 转换器中只转换Date)
我是感觉这么转换的,但是没有成功 希望懂的筒子给我点建议
以下是所有代码描述:
实体类:
User2:
package com.entity;
import java.text.SimpleDateFormat;
import java.util.Date;
public class User2 {
private String username ;
private String password ;
private Date date ;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
@Override
public String toString() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
return "User2 [username=" + username + ", password=" + password
+ ", date=" + sdf.format(date) + "]";
}
public User2(String username, String password, Date date) {
super();
this.username = username;
this.password = password;
this.date = date;
}
public User2() {
super();
// TODO Auto-generated constructor stub
}
}
--------------------------------------------------------------------------------------------------
action:
package com.converter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
import com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter;
public class dateConverter extends DefaultTypeConverter {
@Override
public Object convertValue(Map<String, Object> context, Object value,
Class toType) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
if(toType == Date.class){//String 转 Date
String [] values = (String [])value;
try {
Date date = sdf.parse(values[0]);
System.out.println("convetr--装换日期todate");
return date;
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
else if(toType == String.class){// Date 转String
Date date = (Date) value;
System.out.println("convetr--显示日期toString");
return date.toLocaleString();
}
return null;
}
}
-------------------------------------------------------------------------------------------
HandleLogin2-conversion.properties:
date=com.converter.dateConverter//关于此处 不知有没有写对 是否该用user.date但是试过好像不行
------------------------------------------------------------------------------------------ 展开
2个回答
2013-09-29 · 知道合伙人互联网行家
关注
展开全部
把User2类里setDate方法改一下:
public void setDate(String date) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
this.date = sdf.parse(date);
}
页面<input ..... name="user.date"/>
public void setDate(String date) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
this.date = sdf.parse(date);
}
页面<input ..... name="user.date"/>
追问
setDate方法是在什么时候被调用 的??? 对这个机理理解的不是很深刻
追答
struts2响应一次请求的过程如下:
1:web容器接到请求url被struts2的filter拦截
2:filter根据url找到对应的action
3:创建action对象(如果集成了spring,这步会由spring插件来完成,对象生命周期由spring管理,否则由struts2自己创建)
4:将http请求里的参数注入到action对象的对应属性中,注入方式就是通过页面的name属性值来映射setter方法,调用对应的setter方法来注入属性。
比如:会先调用user对象的setDate方法,再调用action对象的setUser方法完成属性注入
5:execute();
6:将action对象的属性放入valuestack
7:跳转result对应的页面,并展示
以上是主要过程,struts2如果深入了解还是比较复杂的,我也是用用而已,更深层的东西还有待挖掘
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询