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 没有尝试.
东西都在代码里,有兴趣的自己看.