DateAction.java中代码例如以下:

package com.itheima.action;

import java.util.Date;

public class DateAction {

	private Date time;
public Date getTime() {
return time;
}
public void setTime(Date time) {
this.time = time;
}
public String execute() {
return "success";
}
}

struts2.xml:

<action name="dateAction" class="com.itheima.action.DateAction">
<result name="success">/date.jsp</result>
</action>

date.jsp:

<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
${time }
</body>
</html>

代码如上,假设在地址栏输入:

http://localhost:8080/struts2_itheima/dateAction?

time=2011-01-04

控制台和jsp都可以正常输出:

可是假设地址栏输入:

http://localhost:8080/struts2_itheima/dateAction?

time=20110104

控制台输出null,网页则输出

这是由于此种输入方式,time參数传递的是String类型。调用setTime(Date time)方法出错,此时private Date time;获取到的值为空。

可是jsp能原样输出是由于struts2底层当setTime(Date time)方法出错时会自己主动获取參数的值原样输出

解决以上问题的方式是创建自己定义类型转换器:

DateTypeConverter.java:

package com.itheima.type.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 DateTypeConverter extends DefaultTypeConverter { @Override
public Object convertValue(Map<String, Object> context, Object value,
Class toType) {
/*
value:被转换的数据,因为struts2须要接受全部的请求參数,比方复选框
toType:将要转换的类型
*/
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyymmdd");
if(toType == Date.class) {
/*
* 因为struts2须要接受全部的请求參数。比方复选框,这就导致一个參数名称相应多个值。
* 所以框架採用getParamterValues方法获取參数值,这就导致获取到的为字符串数组
* 所以value为字符串数组
*/
String[] strs = (String[])value;
Date time = null;
try {
time = dateFormat.parse(strs[0]);
} catch (ParseException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
return time;
} else if(toType == String.class){
Date date = (Date)value;
String time = dateFormat.format(date);
return time;
}
return null;
} }

然后在DateAction所在包下创建DateAction-conversion.properties文件。这里DateAction为所要进行參数类型转换的action,其它格式固定,即:XXX-conversion.properties

DateAction-conversion.properties内容例如以下:

time=com.itheima.type.converter.DateTypeConverter

项目树:

====================================================================================================

以上的是针对某一个action的局部类型转换器。

也能够创建全局类型转换器,这里仅仅须要改动资源文件:

在WEB-INF/classes文件夹下创建xwork-conversion.properties,在该文件里配置的内容为:

待转换的类型=类型转换期的全类名

本例:

java.util.Date=com.itheima.type.converter.DateTypeConverter

这样全部的action都会拥有该类型转换器

自己定义struts2中action类型转换器的更多相关文章

  1. struts2基础---->自定义类型转换器

    这一章,我们开始struts2中自定义类型转换器的学习. 自定义类型转换器

  2. Struts2中Action接收参数的方法主要有以下三种:

    Struts2中Action接收参数的方法主要有以下三种: 1.使用Action的属性接收参数(最原始的方式):     a.定义:在Action类中定义属性,创建get和set方法:     b.接 ...

  3. Struts2中Action接收参数的方法

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt112 Struts2中Action接收参数的方法主要有以下三种: 1.使用A ...

  4. 基于用户登陆的struts2中action的分类详解

    在struts2中action的分类有:继承 ActionSupport 实现 Action,模型驱动(ModelDriven)的 Action,多方法的 Action三种方式. 1.继承 Actio ...

  5. Struts2中Action自己主动接收參数

    Struts2中Action接收參数的方法主要有下面三种: 1.使用Action的属性接收參数:(通过属性驱动式)     a.定义:在Action类中定义属性,创建get和set方法.     b. ...

  6. Struts2中Action接收参数

    Struts2中Action接收参数的方法主要有以下三种: Struts2中Action接收参数的方法主要有以下三种: 1.使用Action的属性接收参数:     a.定义:在Action类中定义属 ...

  7. struts2中action手动获取參数

    struts2中action手动获取Session,jsp页面參数 1. ActionContext 在Struts2开发中,除了将请求參数自己主动设置到Action的字段中,我们往往也须要在Acti ...

  8. Struts2中Action取得表单数据的几种方法

    Struts2中Action取得表单数据的几种方法   Struts2中Action获得表单数据的几种方法struts2 Action获取表单传值 1.通过属性驱动式JSP: <form act ...

  9. 关于struts2中action请求会执行两次的问题

    关于struts2中action请求会执行两次的问题     在struts2中发现,调用action中的方法,方法会被执行两次,后来发现调用的方法是get开头的,把它改为其他名称开头的后,就不会执行 ...

随机推荐

  1. Bind Enum To DropDownList ?

    0. 准备测试数据 0.1 : 枚举 using System; using System.Collections.Generic; using System.Linq; using System.W ...

  2. ACM程序设计选修课——1018: Common Subsequence(DP)

    问题 L: Common Subsequence 时间限制: 1 Sec  内存限制: 32 MB 提交: 70  解决: 40 [提交][状态][讨论版] 题目描述 A subsequence of ...

  3. zabbix基于LNMP安装

    安装依赖 yum install pcre* #为了支持rewrite功能 yum install openssl openssl-devel yum install gcc make gd-deve ...

  4. 【CF1023C】Bracket Subsequence(模拟)

    题意:给定一个正则括号序列 s ,让你在当中选择一个长度正好为 t 的子串,使得 t 恰好也是一个正则括号序列 思路:用栈模拟 #include<cstdio> #include<c ...

  5. 【CF1017C】The Phone Number(构造)

    题意:要求构造一个1-n的排列,使得它的LIS+LDS最小 n<=1e5 思路:一个百度之星时候从LYY处听来的结论:1-n随机排列的LIS期望是根号级别的 考虑将LIS与LDS都构造成根号级别 ...

  6. batch.bat explaination

    1.Echo 命令 打开回显或关闭请求回显功能,或显示消息.如果没有任何参数,echo 命令将显示当前回显设置. 语法 echo [{on|off}] [message] Sample篅echo of ...

  7. 07深入理解C指针之---指针类型和长度

    该系列文章源于<深入理解C指针>的阅读与理解,由于本人的见识和知识的欠缺可能有误,还望大家批评指教. 如果考虑到程序的可移植性和跨平台性时,指针长度就是一个问题,需要慎重处理.一般情况下, ...

  8. Python入门--15--文件读取、保存

    先看文件读取,open 1.文件打开模式: 打开模式 执行操作 'r' 以只读方式打开文件(默认) 'w'    以写入的方式打开文件,会覆盖已存在的文件 'x' 如果文件已经存在,使用此模式打开将引 ...

  9. 计算机图形——OpenGL

    荒废了太久,趁着"寒假"死磕了两周,验证了不少想法,解开了不少疑惑,代码质量当然是没有的,一切只为看到结果. 有空了再写每一项的细节. 源码地址 2019/5/12 更新 延迟渲染 ...

  10. Objective-C日期相关工具方法

    //date根据formatter转换成string +(NSString*)dateToString:(NSString *)formatter date:(NSDate *)date { NSDa ...