struts1 解决页面日期类型

package com.tlx.dns.domain.web.form;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class DateFormatter {
//日期字符串---->日期类型
public static Date parse(String date){
String pattern="yyyy-MM-dd";
Date dates=null;
SimpleDateFormat sdf=new SimpleDateFormat(pattern);
try {
dates=sdf.parse(date);
} catch (ParseException e) {
e.printStackTrace();
}
return dates;
}
//日期类型---->日期字符串
public static String format(Date date){
String pattern="yyyy-MM-dd";
String dates=null;
SimpleDateFormat sdf=new SimpleDateFormat(pattern);
try {
dates=sdf.format(date);
} catch (Exception e) {
e.printStackTrace();
}
return dates;
}
}

-----------------------------------------------------------------
struts1处理含日期类型的表单【转载】
2009-05-30 10:36
先来看下页面的设计:
<html>
<head>
<title>Struts Cookbook - Chapter 5 : Add Employee</title>
</head>
<body>
<h2>Edit Employee</h2>
<html:form action="/SaveEmployee">
Employee ID: <html:text property="employeeId"/><br />
First Name: <html:text property="firstName"/><br />
Last Name: <html:text property="lastName"/><br />
Married? <html:checkbox property="married"/><br />
Hired on Date: <html:text property="[color=red]hireDateDisplay[/color]"/><br />
Salary: <html:text property="salary"/><br />
<html:submit/>
</html:form>
</body>
</html>

再来看Action 的处理:

public ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {

Employee emp = new Employee( );

// Copy to business object from ActionForm将actionForm中的属性赋值到实体类中;
BeanUtils.[color=green]copyProperties[/color]( emp, form );

request.setAttribute("employee", emp);
return mapping.findForward("success");

}

页面的日期是String型,ActionForm 用Date型肯定出问题,如何解决?再看值对象怎么设计的:【[color=red]实体类中进行类型的转换[/color]】
public class Employee {
private Date [color=violet]hireDate[/color];
public Date getHireDate( ) {
return hireDate;
}
public void setHireDate(Date HireDate) {
this.hireDate = HireDate;
}
public String get[color=red]HireDateDisplay[/color]( ) {
if (hireDate == null)
return "";
else
return dateFormatter.format(hireDate);
}
public void set[color=red]HireDateDisplay[/color](String hireDateDisplay) {
if (hireDateDisplay == null)
hireDate = null;
else {
try {
hireDate = dateFormatter.parse(hireDateDisplay);
} catch (ParseException e) {
e.printStackTrace( );
}
}
}
}

Form的设计比较容易:【actionForm中还是按照String类型接受和处理日期】
public class EmployeeForm extends ActionForm {
public String get[color=red]HireDateDisplay[/color]( ) {
return hireDateDisplay;
}
public void set[color=red]HireDateDisplay[/color](String hireDate) {
this.hireDateDisplay = hireDate;
}

}
--------------------------------------------
【原创】[color=red][size=large]一个关于struts1 页面有日期类型的处理[/size][/color]
方法一:
在actionForm中声明日期类型为java.sql.Date;即可解决所有问题,其他都不用改动;
(因为BeanUtil中没有设置对java.util.Date的转换,但对java.sql.Date进行了由字符串到Date的转换,所以能成功,唯一缺憾是:java类中使用了sql)

方法二:解决方法一的缺憾,但代码麻烦了点。

摘要:总体就是在actionForm中就进行类型的转换,页面上所有的都是String类型,actionForm中的每个日期类型都再设置一个setter和getter方法,这个附加的方法要求是java.util.Date类型的。如:
private String xfxq;

public String getXfrq1() { return xfrq; } //页面中日期标签的name="xfrq1"
public void setXfrq1(String xfrq) { this.xfrq = xfrq; }

public void setXfrq([color=red]Date [/color]xfrq) {……}
public [color=red]Date [/color]getXfrq() {……}
这里主要是在后Date所在的setter和getter两个方法中进行转换。代码如下:

public Date getXfrq() {

if (xfrq == null)
return null;
else
return DateFormatter.parses(xfrq);
}

public void setXfrq(Date xfrq) {
if (xfrq == null)
this.xfrq = "";
else {
this.xfrq = DateFormatter.formats(xfrq);
}
}

DateFormatter类代码:

public class DateFormatter {
public static Date parses(String date){
String pattern="yyyy-MM-dd";
Date dates=null;
SimpleDateFormat sdf=new SimpleDateFormat(pattern);
try {
dates=sdf.parse(date);
} catch (ParseException e) {
e.printStackTrace();
}
return dates;
}

public static String formats(Date date){
String pattern="yyyy-MM-dd";
String dates=null;
SimpleDateFormat sdf=new SimpleDateFormat(pattern);
try {
dates=sdf.format(date);
} catch (Exception e) {
e.printStackTrace();
}
return dates;
}
}

这样就可以了,action中用
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
CommandActionForm caForm=(CommandActionForm) form;
Command cmd=new Command();
BeanUtils.copyProperties(cmd, caForm);
……
}

Command类是hibernate的实体类,它的成员变量和actionForm中的几乎一样,唯一不同就是多了一个Id,同时这个实体类中,定义的日期类型就是java.util.Date类型的,不再是字符串了。【over】
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值