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但是试过好像不行
------------------------------------------------------------------------------------------
展开
 我来答
程序员在思考
2013-09-29 · 知道合伙人互联网行家
程序员在思考
知道合伙人互联网行家
采纳数:347 获赞数:784
毕业于吉林大学计算机科学与技术学院,硕士学位。从事IT互联网工作12年,现任银行产品架构师、高级项目经理

向TA提问 私信TA
展开全部
把User2类里setDate方法改一下:
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如果深入了解还是比较复杂的,我也是用用而已,更深层的东西还有待挖掘
Lee小店
2013-10-08 · TA获得超过1265个赞
知道小有建树答主
回答量:767
采纳率:0%
帮助的人:369万
展开全部
配置文件中这样location=包名/类名
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式