在Struts中我们经常要处理用户录入的日期字符串,将其转换为java.util.Date类型。在这里我们提供两种方式来实现这样的转换。
1 在ActionForm子类中,创建两个变量来处理日期,一个为Date类型,一个为String类型(临时变量),我们使用String类型的变量来接受用户的录入,再编码将其转换为Date类型,在页面输出时,在根据Date类型生成自定义的文本格式。这种方式灵活性大,不过需要你多付出点劳动。
2 编写一个plugin实现自动转换。Struts下各种对象类型的转换是通过BeanUtils的Converter实现,所以我们只需向 BeanUtils注册一个日期字符转换的Converter即可,这种方式不需要你编写代码进行转换,不过在页面呈现的时候,你可能需要进行格式化,从 Date对象之间生产的字符串(toString())往往不是你需要的,使用JSTL就可以的。
首先编写一个日期转换的Converter类:
import java.text.SimpleDateFormat;
import org.apache.commons.beanutils.Converter;
import java.util.Set;
import java.util.HashSet;
import java.util.Iterator;
import java.text.ParseException;
/**
*
* 日期转换对象,使用该转换器,在BaseForm当中做一下注册,系统自动地帮助字符的日期表示转换为java.util.Date对象.
* @author zizz.
* Create Time:2006-9-11 19:11:47.
*/
public class DateConverter implements Converter {
/**
* 日期格式化对象.
*/
private static SimpleDateFormat df = new SimpleDateFormat();
/**
* 模式集合.
*/
private static Set<String> patterns = new HashSet<String>();
//注册一下日期的转换格式
static{
DateConverter.patterns.add("yyyy-MM-dd");
DateConverter.patterns.add("yyyy-MM-dd HH:mm");
DateConverter.patterns.add("yyyy-MM-dd HH:mm:ss");
DateConverter.patterns.add("yyyy/MM/dd HH:mm:ss");
}
/**
* 日期转换器.
* @param type Class
* @param value Object
* return Date Object.
*/
public Object convert(Class type,Object value){
if(value == null){
return null;
}else if(value instanceof String){
Object dateObj = null;
Iterator it = patterns.iterator();
while(it.hasNext()){
try{
String pattern = (String)it.next();
df.applyPattern(pattern);
dateObj = df.parse((String)value);
break;
}catch(ParseException ex){
//do iterator continue
}
}
return dateObj;
}else{
return value;
}
}
}
然后编写一个Struts的plugin,执行Converter注册:
public class ConvertPlugIn implements PlugIn {
public void destroy() {
ConvertUtils.deregister();
}
public void init(ActionServlet arg0, ModuleConfig arg1)
throws ServletException {
ConvertUtils.register(new DateConverter(), Date.class);
}
}
最后在struts-config.xml进行plugin声明:
<plug-in className="DateConverter" />
进行日期转换,这对Struts来说是非常有益的。Struts的ActionForm一直被认为是设计的缺陷,但是通过BeanUtils可以快速实现 ActionForm、VO、PO对象之间的转换,这就要求ActionForm设计比较合理,当然在ActionForm中实现从采集字符串到日期的转换会节省很多时间,我们只需关注域对象间的转换就可以啦。
分享到:
相关推荐
在Struts2中,类型转换和国际化是两个重要的特性,用于处理数据类型之间的转换以及多语言环境下的内容显示。 **类型转换**是Struts2处理请求参数与Action类属性之间数据类型不匹配的过程。当用户通过表单提交请求时...
例如,用户输入的字符串可以自动转换为整数或日期。如果Struts2内置的转换器无法满足需求,开发者还可以自定义转换器。 Struts2标签库是其强大的视图层工具,简化了JSP页面的编写。例如: 1. `<s:form>`:创建表单...
例如,如果一个字段是整型,Struts2会尝试将字符串转换为Integer。 2. **自定义转换器**:如果默认的类型转换不满足需求,我们可以创建自定义的转换器类。这个类需要实现`Converter`接口,并覆盖`convert`方法。...
- 在Java中,资源包是包含本地化字符串和其他可配置资源的文件。对于Struts1,这些通常以`.properties`格式存储,例如`messages.properties`,`messages_zh_CN.properties`(中文简体)等。 2. **Locale对象**: ...
Struts2.0还提供了参数化的国际化字符串,使得在不同场景下灵活使用多语言文本成为可能。 五、转换器(Converter)在Struts2.0中的作用 转换器是Struts2.0框架中的一个重要概念,它负责将请求参数转换为Java类型的...
6. `commons-lang3-3.1.jar`:Apache Commons Lang库,提供了许多Java语言层面上的实用工具类,如字符串操作、数组处理等,为Struts2提供便利的工具支持。 7. `ognl-3.0.6.jar`:Object-Graph Navigation Language...
例如,`execute()`方法用于执行特定的操作,返回一个字符串表示视图的跳转路径。 2. **Interceptor拦截器**:拦截器是Struts2的一个强大特性,允许在Action调用前后插入自定义逻辑。常见的拦截器如`...
5. **转换器Converter**:Struts2允许自定义转换器来处理数据类型转换,比如将用户输入的字符串转换为日期或数字,确保数据的正确性和一致性。 6. **表单数据验证**:Struts2提供了强大的内置验证框架,可以在...
11. **commons-lang3.jar**:Apache Commons Lang库,提供了一些高级的字符串和对象操作工具。 12. **javassist.jar**:Javassist是一个字节码处理库,用于在运行时动态修改类或接口。 以上jar包只是Struts2.3.1 ...
在实际应用中,常常会继承Struts2提供的StrutsTypeConverter类,覆盖convertFromString和convertToString方法,以便更灵活地进行字符串到对象以及对象到字符串的转换。 三、Struts2输入校验 Struts2提供了两种主要...
5. **存入Session**: 生成的验证码图像和其对应的文本字符串需要存入用户的session,以便后续验证时使用。同时,也可以设置一个过期时间,避免长时间未使用的验证码被重复使用。 6. **处理验证请求**: 当用户输入...
7. **commons-lang-2.3.jar**:Apache Commons Lang提供了一些高级字符串和对象处理的工具类,如类型转换、日期和时间操作等,对Struts2的功能增强起到了辅助作用。 8. **ognl-2.7.3.jar**:OGNL(Object-Graph ...
7. **Commons Lang**: `commons-lang3-3.2.jar` 是Apache Commons项目的一部分,提供了一些Java语言的扩展,如字符串处理、日期时间操作、反射等,是Java开发中常用的工具类库。 8. **Commons IO**: `commons-io-...
`MessageFormat` 类用于格式化和解析带参数的消息字符串,以便根据不同的 `Locale` 显示不同的文本。 - **格式化消息**:使用 `MessageFormat.format(String pattern, Object... arguments)` 方法可以将消息模板中...
该类封装了生成随机字符串和将字符串渲染为图像的过程。 - **随机字符串生成**:使用`Random`类生成随机数字作为验证码文本。 - **图像渲染**:使用`BufferedImage`和`Graphics`类来绘制图像。具体过程如下: - ...
- **转换器(Converter):**用于将字符串转换为特定类型的对象,提高数据处理效率。 - **输入校验:**提供灵活的输入验证机制,支持多种形式的数据校验规则。 - **拦截器(Interceptor):**用于处理横切关注点,...
5. **commons-lang3-3.2.jar**:Apache Commons Lang是一个提供了一系列实用工具函数的库,帮助开发者处理字符串、日期、数组等基本对象的操作。在Struts2中,这些工具函数被广泛应用于各个角落。 6. **ognl-3.0.19...
5. **Apache Commons Lang3** (`commons-lang3-3.1.jar`): 这个库提供了大量的Java语言工具类,增强了标准库的功能,例如字符串处理、日期/时间操作等,对开发高效代码非常有帮助。 6. **OGNL (Object-Graph ...
- **实现方式**:演示如何创建一个类型转换器,用于将字符串转换成User对象。 - **5.4.2 User数组属性类型转换器,有多个String需要转换为User类型** - **实现方式**:如果需要将多个字符串转换成User对象数组,...
Struts2提供了转换器机制,用于将HTTP请求中的字符串转换为Action类中的属性类型,确保了数据的一致性和准确性。 #### Struts2拦截器 拦截器是Struts2的核心机制之一,它可以在请求处理的各个阶段进行拦截,执行...