Struts 类型转换之局部和全局配置

本文介绍了Struts2中如何处理时间日期类型转换,包括内置的转换器功能和如何自定义DateAction进行日期格式转换,以满足不同格式的需求。

我们碰到过很多情况,就是时间日期常常会出现错误,这是我们最头疼的事,在struts2中有一些内置转换器,也有一些需要我们自己配置。 

我们为什么需要类型转换呢?

在基于HTTP协议的Web应用中 客户端请求的所有内容(表单中提交的内容等)都以文本编码的方式传输到服务器端
但服务器端的编程语言(如Java)有着丰富的数据类型 如 int boolean Date 等等
因此 当这些参数进入应用程序时 必须被转换成适合的服务器端编程语言的数据类型

在Servlet中 类型转换工作是由开发者自己完成的,例如:

  String s=request.getParameter("pageIndex");
  int pageIndex=Integer.parseInt(s);

类型转换的工作是必不可少的 重复性的. 如果有一个良好的类型转换机制 必将大大节省开发时间,提高开发效率。

Struts2提供了强大的类型转换功能:

内置转换器:

对于大部分的常用类型 开发人员在开发过程中不需要自己编码实现类型转换 这是因为在Struts2框架爱中可以完成大多数常用的类型转换
 //由内部提供的类型转换器完成
 1.String 将 int long double boolean String数组或者java.util.Date类型转换为字符串
 2.boolean/Boolean 在字符串和布尔值之间转换
 3.char/Character 在字符串和字符之间进行转换
 4.int/Integer float/Float  long/Long double/Double
 5.Date 在字符串和日期只见进行转换 具体输入输出格式与当前的local有关
 6.数组和集合 在字符串数组和数组对象 几何对象之间进行转换

接下来我们讲解一下自定义类型转换器:

1.0创建一个Action来继承ActionSupport

public class StudentAction extends ActionSupport {
    private Date date;

    public Date getDate() {
        return date;
    }

    public void setDate(Date date) {
        this.date = date;
    }

    @Override
    public String execute() throws Exception {
        System.out.println(date);
        return SUCCESS;
    }
}

2.0创建一个DateAction继承StrutsTypeConverter

public class DateAction extends StrutsTypeConverter {

    private static final List<SimpleDateFormat> list=new ArrayList<SimpleDateFormat>();
    static {
        list.add(new SimpleDateFormat("yyyy/MM/dd"));
        list.add(new SimpleDateFormat("yyyy-MM-dd"));
    }
    public Object convertFromString(Map context, String[] values, Class toClass) {
        String date=values[0];
        for (SimpleDateFormat item:list){
            try {
                return item.parse(date);
            } catch (ParseException e) {
               continue;
            }
        }
      throw new TypeConversionException();
    }

    public String convertToString(Map map, Object o) {
        System.out.println(new Date()+"============================");
        return o.toString();
    }
}

3.0创建StudentAction-conversion.properties

date=cn.converter.DateAction

4.0Struts.xml中的配置

    <package name="default" namespace="/" extends="struts-default">
        <action name="stuAction" class="cn.action2.StudentAction">
            <result>/converter/success.jsp</result>
            <result name="input">/converter/index.jsp</result>
        </action>
    </package>

5.0页面

index.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="s" uri="/struts-tags" %>
<html>
<title>登陆页面</title>
<body>
<s:fielderror></s:fielderror>
<s:form action="stuAction" method="POST">
    <s:textfield name="date"></s:textfield>
    <s:submit value="提交"></s:submit>
</s:form>
</body>
</html>

success.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
    <title>成功页面</title>
</head>
<body>
欢迎你:<s:property value="date"></s:property></body>
</html>
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ohmygodvv

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值