自己定义struts2中action类型转换器
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类型转换器的更多相关文章
- struts2基础---->自定义类型转换器
这一章,我们开始struts2中自定义类型转换器的学习. 自定义类型转换器
- Struts2中Action接收参数的方法主要有以下三种:
Struts2中Action接收参数的方法主要有以下三种: 1.使用Action的属性接收参数(最原始的方式): a.定义:在Action类中定义属性,创建get和set方法: b.接 ...
- Struts2中Action接收参数的方法
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt112 Struts2中Action接收参数的方法主要有以下三种: 1.使用A ...
- 基于用户登陆的struts2中action的分类详解
在struts2中action的分类有:继承 ActionSupport 实现 Action,模型驱动(ModelDriven)的 Action,多方法的 Action三种方式. 1.继承 Actio ...
- Struts2中Action自己主动接收參数
Struts2中Action接收參数的方法主要有下面三种: 1.使用Action的属性接收參数:(通过属性驱动式) a.定义:在Action类中定义属性,创建get和set方法. b. ...
- Struts2中Action接收参数
Struts2中Action接收参数的方法主要有以下三种: Struts2中Action接收参数的方法主要有以下三种: 1.使用Action的属性接收参数: a.定义:在Action类中定义属 ...
- struts2中action手动获取參数
struts2中action手动获取Session,jsp页面參数 1. ActionContext 在Struts2开发中,除了将请求參数自己主动设置到Action的字段中,我们往往也须要在Acti ...
- Struts2中Action取得表单数据的几种方法
Struts2中Action取得表单数据的几种方法 Struts2中Action获得表单数据的几种方法struts2 Action获取表单传值 1.通过属性驱动式JSP: <form act ...
- 关于struts2中action请求会执行两次的问题
关于struts2中action请求会执行两次的问题 在struts2中发现,调用action中的方法,方法会被执行两次,后来发现调用的方法是get开头的,把它改为其他名称开头的后,就不会执行 ...
随机推荐
- java EE技术体系——CLF平台API开发注意事项(1)——后端开发
前言:这是一篇帮助小伙伴在本次项目中快速进入到java EE开发的一些说明,为了让同组小伙伴们开发的时候,有个清晰点的思路.昨天给大家演示分享了基本概况,但没有留下文字总结说明,预防后期有人再次问我, ...
- Android中当前墙纸Wallpaper存放的位置
最近想做个应用保存当前墙纸,找了一下,发现当前墙纸的位置在. /System/users/0/wallpaper 没有后缀.导出来修改一下名字就可以看到图标了.比如改为png. 但是,这个目录要求系统 ...
- iOS学习笔记39-ReactiveCocoa入门
FRP,全称为Functional Reactive Programming,是一种响应变化的编程范式,最近几年比较火,大概的理解就像这样: 当a的值或者b的值发生变化时,c的值会自动响应a的值或b的 ...
- ubuntu安装jdk<服务器>
服务器 阿里云服务器Ubuntu安装jdk7 2014-08-25 16:44 | coding云 | 5825次阅读 | 6条评论 一.下载jdk 可以先下载到本地,然后ftp到服务器 官方 ...
- wireshark推荐书籍
1 wireshark数据包分析实战 有中文版 2 wireshark网络分析 英文版 3 TCP/IP协议栈详解卷一
- hdu 1979 剪枝暴搜
Fill the blanks Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- JSON 序列化与弱类型
一.C#中JSON序列化有多种方式: 使用“DataContractJsonSerializer ”类时需要, 1.引用程序集 System.Runtime.Serialization 和 Syste ...
- Java程序员最常犯的错误盘点之Top 10
1. 数组转ArrayList 为了实现把一个数组转换成一个ArrayList,很多Java程序员会使用如下的代码: Arrays.asList确实会返回一个ArrayList对象,但是该类是Arra ...
- 【MFC】设置窗口焦点
BOOL CTMSDlg::OnInitDialog() { ...... ...... //设置窗口焦点,注意return TRUE 改成 return FALSE GetDlgItem(IDC_E ...
- wxpython example
#!/usr/bin/env python #---------------------------------------------------------------------------- ...