Struts2 part 5:类型转换器

1、实现TypeConverter接口,实现

convertValue(java.util.Map<java.lang.String,java.lang.Object> context, java.lang.Object target, java.lang.reflect.Member member, java.lang.String propertyName, java.lang.Object value, java.lang.Class toType) 

 2、继承DefaultTypeConverter类,覆写

convertValue(java.util.Map<java.lang.String,java.lang.Object> context, java.lang.Object value, java.lang.Class toType) 

 3、继承StrutsTypeConverter,覆写

//请求封装
convertFromString(java.util.Map context, java.lang.String[] values, java.lang.Class toClass)  
//数据回显 
convertToString(java.util.Map context, java.lang.Object o) 

类型转换是双向,请求<--->回显,一继承DefaultTypeConverter类为例,写一个日期类型的转换器

jsp

<form action="${pageContext.request.contextPath }/demo05/param6.action" method="post">
		日期<input type="text" name="date" /><br/>
		 <input type="submit" value="提交" />
	</form>

 action

public class ParamAction6 extends ActionSupport {
	private Date date;

	@Override
	public String execute() throws Exception {
		System.out.println(date);
		return NONE;
	}

	public Date getDate() {
		return this.date;
	}

	public void setDate(Date date) {
		this.date = date;
	}

}

 转换器

public class DateConvert extends DefaultTypeConverter {
	@Override
	public Object convertValue(Map<String, Object> context, Object value, Class toType) {
		DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
		// 请求参数封装
		if (Date.class == toType) {
			String[] val = (String[]) value;
			String dateVal = val[0];
			try {
				return dateFormat.parse(dateVal);
			} catch (ParseException e) {
				e.printStackTrace();
			}
		} else {
			// 回显数据封装
			Date date = (Date) value;
			return dateFormat.format(date);
		}
		return null;
	}
}

 struts配置

	<action name="param6" class="demo05.ParamAction6">
		</action>

 注册转换器

1、局部注册,针对特定属性,在action所在包装件“ParamAction6-conversion.properties”文件,“Action类名+-conversion.properties”,内容为

date = demo05.DateConvert

 date为Action中的属性名,转换器只在本Action有效

2、全局注册,针对特定类型,在src下创建“xwork-conversion.properties”,内容为

java.util.Date = demo05.DateConvert

 这种方式针对所有java.util.Date类型都有效

类型转换中的错误处理流程



 

 在Action中抛出异常

public class DateConvert extends DefaultTypeConverter {
	@Override
	public Object convertValue(Map<String, Object> context, Object value, Class toType) {
		DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
		// 请求参数封装
		if (Date.class == toType) {
			String[] val = (String[]) value;
			String dateVal = val[0];
			try {
				return dateFormat.parse(dateVal);
			} catch (ParseException e) {
				throw new RuntimeException(e);
			}
		} else {
			// 回显数据封装
			Date date = (Date) value;
			return dateFormat.format(date);
		}
	}
}

 jsp

<%@ taglib uri="/struts-tags"  prefix="s"%>
	<s:fielderror></s:fielderror>
	<form action="${pageContext.request.contextPath }/demo05/param6.action" method="post">
		日期<input type="text" name="date" /><br/>
		 <input type="submit" value="提交" />
	</form>

 配置

		<action name="param6" class="demo05.ParamAction6">
			<result name="input">/demo05/params.jsp</result>
		</action>

 这是页面出现的错误信息为英文,通过设置properties文件,将错误信息转换为中文,创建“ParamAction6.properties”,Action类名.properties,内容为invalid.fieldvalue.属性名= 错误信息

 invalid.fieldvalue.date =格式为年-月-日

 properties中不能有中文需要转码

猜你喜欢

转载自mvplee.iteye.com/blog/2240555