Struts2 中的类型转换

Struts2 相对于Struts1 进步许多.在类型转换方面可以自动转换 int ,boolean ,double,Date(用的时候有些问题).Set ,List,数组 进行转换.

这里主要说一下自定义类型转换器.

1 局部

为 TestAction 配制  ****-conversion.properties  形式命名

TestAction-conversion.properties 

user.userName=com.isw2.convert.DefaultConvert

 com.isw2.convert.DefaultConvert.java

package com.isw2.convert;

import java.util.Map;

import ognl.DefaultTypeConverter;

public class DefaultConvert extends DefaultTypeConverter {

	@Override
	public Object convertValue(Map context, Object value, Class toType) {
		System.out.println("自定义转换 DateConvert.convertValue ---------------");
		if (value instanceof String[]) {// 从Action 输出
			String[] strArr = (String[]) value;
			return strArr[0] + "." + strArr[1];
		}
		return value;
	}
}

 这里继承了类 DefaultTypeConverter 并重写了 convertValue 方法.

 

2全局

xwork-conversion.properties

java.util.Date=com.isw2.convert.Struts2Convert

 这里表示转换所有 Date 对象.

com.isw2.convert.Struts2Convert.java  继承了 StrutsTypeConverter(抽象类) 类

package com.isw2.convert;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Map;

import org.apache.struts2.util.StrutsTypeConverter;

public class Struts2Convert extends StrutsTypeConverter {

	/**
	 * 手动将 String[] 转为所需类型,交给Action
	 */
	@Override
	public Object convertFromString(Map arg0, String[] value, Class arg2) {
		DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
		try {
			if (null != value[0] && value[0].trim().length() > 0) {
				return format.parse(value[0]);
			} else {
				return null;
			}
		} catch (ParseException e) {
			e.printStackTrace();
			return null;
		}
	}

	/**
	 * 将从 Action 获得的数据转化为 String[] 型
	 */
	@Override
	public String convertToString(Map arg0, Object value) {
		DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		return format.format(value);
	}
}

 3 转换错误提示

TestAction.properties

invalid.fieldvalue.user.userAge=\u5E74\u9F84\u6709\u8BEF.

 message.properties

xwork.default.invalid.fieldvalue={0}\u7C7B\u578B\u8F6C\u6362\u51FA\u9519.

 4 sx:datetimepicker  的使用

引入  struts2-dojo-plugin-2.1.8.jar

引入  <%@ taglib prefix="sx" uri="/struts-dojo-tags"%>

<head></head> 中添加

     <s:head theme="xhtml" />
     <sx:head parseContent="true" extraLocales="en_us" />

<sx:datetimepicker name="user.userBirthday"
                displayFormat="yyyy-MM-dd" language="en_us"
                label="user.userBirthday" value="%{user.userBirthday }" />

 

 

我在用时发现只有  sx:datetimepicker  才能默认转换.不知问题何在.

 

 

List ,数组,Set   没有尝试.

 

东西都在代码里,有兴趣的自己看.

你可能感兴趣的:(java,apache,XHTML,struts,dojo)