类型转换
类型转换
将某些类型的数据转换成固定的形式
比如说:
new SimpleDateFormat("yyyy 年MM 月dd 日"),
new SimpleDateFormat("yyyy-MM-dd"),
new SimpleDateFormat("MM/dd/yy"),
new SimpleDateFormat("yyyy.MM.dd"),
new SimpleDateFormat("yyMMdd"),
new SimpleDateFormat("yyyy/MM/dd") };
首先创建一个jsp页面去接受收入数据的类型:
<%@ taglib prefix="s" uri="/struts-tags" %>
<body>
<s:form action="dateConvert.action">
<div class="infos">
<table class="field">
<tr>
<td class="field">请输入日期:</td>
<td><input type="text" class="text" name="timeDate" /></td>
</tr>
<s:fielderror />
</table>
<div class="buttons">
<s:submit value="转换格式"/>
</div>
</div>
</s:form>
</body>
2.上边的页面会将数据交给dateConvert处理,dateConvert类由于要处理数据转换方面的问题,所以继承了StrutsTypeConverter
具体代码如下:
package cn.jbit.util;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
import org.apache.struts2.util.StrutsTypeConverter;
import com.opensymphony.xwork2.conversion.TypeConversionException;
public class DateConverter extends StrutsTypeConverter {
// 支持转换的多种日期格式,可增加时间格式 控制台可以接受的类型转换格式
private final DateFormat[] dfs = {
new SimpleDateFormat("yyyy 年MM 月dd 日"),
new SimpleDateFormat("yyyy-MM-dd"),
new SimpleDateFormat("MM/dd/yy"),
new SimpleDateFormat("yyyy.MM.dd"),
new SimpleDateFormat("yyMMdd"),
new SimpleDateFormat("yyyy/MM/dd") };
/**
* 将指定格式字符串转换为日期类型。
*/
public Object convertFromString(Map context, String[] values, Class toType) {
String dateStr = values[0];// 获取日期的字符串
for (int i = 0; i < dfs.length; i++) {// 遍历日期支持格式,进行转换
try { //2012/12/12
return dfs[i].parse(dateStr); //进行格式的比较
} catch (Exception e) {
continue;
}
}
throw new TypeConversionException("转换错误");
}
public String convertToString(Map context, Object object) {
Date date = (Date) object;
// 输出的格式是yyyy-MM-dd
return new SimpleDateFormat("yyyy-MM-dd").format(date);
}
}
上述类可以说是用来做类型转换的一个自定义的手工的工具类,现在做的需要真正的转换字符串
创建出一个数据转换的action类,如下:
package cn.jbit.action;
import java.util.Date;
import com.opensymphony.xwork2.ActionSupport;
public class DateConvertAction extends ActionSupport {
//定制成员变量TIMEDATE 时间
private Date timeDate;
public String execute(){
return SUCCESS;
}
public Date getTimeDate() {
return timeDate;
}
public void setTimeDate(Date timeDate) {
this.timeDate = timeDate;
}
}
我们可以通过两种方式吧工具类和真正的action类做一个关联:
1.可以创建一个全局类型的转换器
转换类全名=类型转换器类的全名(文件名为xword.conversion.properties)的属性文件,里边配置为:
java.util.Date=cn.jbit.util.DateConverter
这是适合于多个action的全局的
2.可以创建一个相对于单个action的属性文件:ClassName.conversion.properties
其内容为特定类的属性名=类型转换器的全名
完成之后可以做一些处理类型转换错误的操作:
1.前提条件:>启动strusConversionErrorInterceptor拦截器,该拦截器包含在defaultStack拦截器栈中,参看struts-defatul.xml文件,如果在struts.xml中扩展了"struts-default"包,启动项目时会自动加载
>实现validationAware接口,ActionSupport实现了该接口
>配置input结果映射,出现错误之后,停留到该页面
>再页面使用<s:fielderror>标签来输出转换的错误.
2.修改所有类型的转换错误信息
<constant name ="struts.custom.i18n.resources" value="message">
创建资源文件message.properties ,并添加文本:
xwork.default.invalid.fieldvalue=field"{0}"'s value is invalid
3.定制特定字段的类型转换错误信息在action 同级目录下 DateConvertAction.properties
invalid.fieldvalue.timeDate
日期格式错误


浙公网安备 33010602011771号