Struts2学习教程之自定义类型转换器的方法
什么是类型转换器?
在Struts2中,表单提交的参数是以字符串的形式传递给Action的,而我们在编写Action时经常会定义一些非字符串类型的属性(如int、Date等)。这时,Struts2就需要将这些字符串类型的参数转换成相应的目标类型,这个过程就是类型转换。
Struts2默认内置了一套类型转换器,可以将常用类型(如int、Date、String等)的字符串参数自动转换成对应类型。但如果我们定义了一些自定义类型的属性,如何才能让Struts2自动将字符串参数转换为这些自定义类型呢?这就需要自定义类型转换器。
自定义类型转换器的方法
自定义类型转换器需要继承自com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter类,并实现convertValue()方法。该方法的作用是将字符串参数转换为目标类型,具体实现方式需要根据目标类型不同而不同。
以下是自定义一个Date类型转换器的示例代码:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Map;
import com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter;
public class DateConverter extends DefaultTypeConverter {
private final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@Override
public Object convertValue(Map<String, Object> context, Object value, Class<?> toType) {
if (toType == java.util.Date.class) {
String dateString = null;
String[] params = (String[]) value;
if (params.length > 0) {
dateString = params[0];
}
if (dateString != null && !dateString.isEmpty()) {
try {
return sdf.parse(dateString);
} catch (ParseException e) {
e.printStackTrace();
}
}
} else if (toType == String.class) {
return sdf.format(value);
}
return null;
}
}
DateConverter 类继承自 DefaultTypeConverter 类,实现了 convertValue() 方法。在 convertValue() 方法中,我们判断目标类型是否为 java.util.Date 类型,如果是,则将输入的字符串(默认名称为值栈中的对象名)转换为 Date 类型。如果是 String 类型,则将 Date 类型转换为字符串。
如何在Struts2中使用自定义类型转换器?
第一步,我们需要在配置文件(struts.xml或struts-config.xml)中注册自定义类型转换器。
<constant name="struts.conversion.properties" value="converter.properties"></constant>
# 配置自定义类型转换器
date=cn.mysite.converter.DateConverter
在 properties 文件中指定类型转换器,其中 "date" 为目标类型,即在类别转换时需要转换成该类型。
第二步,我们需要在Action类中定义对应的属性,并在jsp文件中使用input标签提交数据。以下是一个处理日期时间的Action和对应的JSP页面的示例代码:
public class DateAction extends ActionSupport {
private Date date;
private String dateString;
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public String getDateString() {
return dateString;
}
public void setDateString(String dateString) {
this.dateString = dateString;
}
@Override
public String execute() throws Exception {
return SUCCESS;
}
}
<s:form action="date" method="post">
<s:textfield label="日期时间" name="dateString" />
<s:submit />
</s:form>
在JSP页面中,我们使用input标签提交数据,并将数据绑定到action的属性上。注意这里的属性名称要和默认名称(即值栈对象名)一致。比如上面的例子中,我们使用的属性名称是dateString,而自定义的类型转换器中默认使用的值栈对象名是date。
以上就是自定义类型转换器的基本介绍和使用方法。通过自定义类型转换器,我们能够将任意自定义类型的参数快速转换为目标类型,提高了Struts2的易用性和扩展性。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Struts2学习教程之自定义类型转换器的方法 - Python技术站