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. [linux小技巧]批量移动文件

    for i in {1..23};do mv test$i/ ../;done

  2. oracle主键设置与oracle序列

    第一步:添加主键(如果已有且是自己命名的可略过) 一个表中要有主键,我们建主键的时候要自己命名,如果不是可能在后边遇到“主键唯一,不能自动添加”的问题. 设置主键: alter table " ...

  3. xtrabackup: error: last checkpoint LSN (3409281307) is larger than last copied LSN (3409274368). #2

    1.错误发生场景:使用2.4.1版本的xtrabackup工具进行全备,备份日志中报出此错误2.知识要点:MySQL中,redo 日志写进程会在三种条件下被触发从log buffer中写日志到redo ...

  4. c3p0-config.xml模板详解

    c3p0-config.xml模板详解 <c3p0-config> <default-config> <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数.De ...

  5. 漫谈登录桩(MockStub)的实现

    2014年6月4日,6月的第一个星期三,我正式入职百度,开始baiduer的工作.这不到2个月的时间,因为人力资源这边原因,我从INF部门离开,拉到了百度Hi-Server团队中来.2个完全不着调的岗 ...

  6. log4j.xml——java日志处理组件配置简介

    (从一篇好文开始)log4j(一)——为什么要用log4j? 三:看完栗子后的感想 (1)很明显我们在编写代码的时候有各种需要打印日志的需求,比如:我们调试代码的时候:我们的应用出现了问题,我们分析. ...

  7. MongoDb C# 驱动操作示例

    c#操作mongo数据库 驱动采用http://www.oschina.net/p/mongo-csharp-driver C#驱动的基本数据库连接,增删改查操作 //定义对象 public clas ...

  8. UVA 10131 Is Bigger Smarter?(DP最长上升子序列)

    Description   Question 1: Is Bigger Smarter? The Problem Some people think that the bigger an elepha ...

  9. 文本生成器(bzoj 1030)

    Description JSOI交给队员ZYX一个任务,编制一个称之为“文本生成器”的电脑软件:该软件的使用者是一些低幼人群,他们现在使用的是GW文本生成器v6版.该软件可以随机生成一些文章―――总是 ...

  10. 'Add Solution': A timeout has occurred while invoking commands in SharePoint host process.

    一.问题描述: 在部署SharePoint solution的时候,出现Time out 的问题,错误提示: Error occurred in deployment step 'Add Soluti ...