前面整理了Jsp中useBean中字符串和时间的转化操作,然后到Struts中试了一下,发现,Struts中转化时间用的不是java.beans.PropertyEditorManager,而是通过BeanUtil处理的,在网上找了一下,发现过程和前一篇中的差不多,只不过,继承的类不一样,注册的方法不一样了,下面看下处理的过程。
首先,创建DateConverter对象,使其继承org.apache.commons.beanutils.Converter接口,简单实现如下:
package com.zywang.util.extend;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.commons.beanutils.Converter;
/**
* @author ZYWANG 2009-6-22
*/
public class DateConverter implements Converter {
private static final SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
/* (non-Javadoc)
* @see org.apache.commons.beanutils.Converter#convert(java.lang.Class, java.lang.Object)
*/
@Override
public Date convert(Class arg0, Object arg1) {
// TODO Auto-generated method stub
if(arg1 instanceof String){
try {
return format.parse((String)arg1);
} catch (ParseException e) {
e.printStackTrace();
return null;
}
}
return null;
}
}
然后找个位置,比如上次我们在过滤器中init方法中注册的,这次也可以在过滤器的init方法中注册,注册代码如下:
package com.zywang.util.extend;
import java.io.IOException;
import java.util.Date;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import org.apache.commons.beanutils.ConvertUtils;
/**
* JSP页面乱码处理过滤器
* @author ZYWANG 2009-6-20
* Servlet Filter implementation class ChangeEncoding
*/
public class SetCharacterEncodingFilter implements Filter {
/**
* Default constructor.
*/
public SetCharacterEncodingFilter() {
}
/**
* @see Filter#destroy()
*/
public void destroy() {
}
/**
* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
*/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// place your code here
request.setCharacterEncoding("GB18030");
// pass the request along the filter chain
chain.doFilter(request, response);
}
/**
* @see Filter#init(FilterConfig)
*/
public void init(FilterConfig fConfig) throws ServletException {
//注册JavaBean日期转化器
java.beans.PropertyEditorManager.registerEditor(java.util.Date.class, DatePropertyEditor.class);
//注册Struts的日期转化对象
ConvertUtils.register(new DateConverter(), Date.class);
}
}
使用这种方法就可以实现提交表单的数据的自动转化为日期类型了。
另外在网上看到另外一种实现方法,这个方法首先需要创建DateConvertPlugIn对象,使其实现org.apache.struts.action.PlugIn接口,然后在改对象的init方法中注册,最后再将该对象以插件的方式注册到Struts中
DateConvertPlugIn的示例代码如下:
/**
*
*/
package com.zywang.util.extend;
import java.util.Date;
import javax.servlet.ServletException;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.struts.action.ActionServlet;
import org.apache.struts.action.PlugIn;
import org.apache.struts.config.ModuleConfig;
/**
* @author ZYWANG 2009-6-22
*/
public class DateConvertPlugIn implements PlugIn {
/* (non-Javadoc)
* @see org.apache.struts.action.PlugIn#destroy()
*/
@Override
public void destroy() {
// TODO Auto-generated method stub
ConvertUtils.deregister(Date.class);
}
/* (non-Javadoc)
* @see org.apache.struts.action.PlugIn#init(org.apache.struts.action.ActionServlet, org.apache.struts.config.ModuleConfig)
*/
@Override
public void init(ActionServlet arg0, ModuleConfig arg1)
throws ServletException {
// TODO Auto-generated method stub
ConvertUtils.register(new DateConverter(), Date.class);
}
}
在Struts中注册的代码是:
<plug-in className="com.zywang.util.extend.DateConvertPlugIn"></plug-in>
这样也可以达到我们目的,但这两种做法哪个更好,在下就搞不明白了。
附件是我测试用的DEMO,实现了JavaBean中日期的转化和Struts的FormBean中日期的转化,及两种Struts下注册方法(插件方式、过滤器方式)。
分享到:
相关推荐
在这个例子中,我们将深入探讨如何在Struts1.2中实现动态FormBean并添加验证功能。 首先,让我们理解什么是动态FormBean。在传统的Struts1应用中,每个ActionForm Bean都是一个Java类,它对应于HTML表单的字段,并...
"Struts中英文帮助手册"是一个宝贵的资源,它提供了关于Struts框架的详细信息,帮助开发者理解和使用这个强大的工具。 中文PDF和英文CHM格式的手册涵盖了以下几个主要的知识点: 1. **Struts框架基础**:介绍...
2. **配置文件**:struts-config.xml是核心配置文件,包含了Action、ActionMapping、FormBean和Result的定义,这些定义指导了请求如何被处理并跳转到相应视图。 3. **Tiles框架**:Struts1可以与Tiles框架结合使用,...
- **日期格式化**:如果JSON中包含日期,我们需要自定义日期格式,避免解析错误。 - **异常处理**:在读取JSON时,可能会遇到JSON格式错误等问题,应捕获并处理`JsonParseException`或类似的异常。 - **JSON Path**...
在Struts中: - **Model(模型)**:负责处理系统状态和业务逻辑,通常由JavaBeans(包括ActionForm Beans和系统状态Beans)以及业务逻辑Beans组成。它们管理应用程序的数据并执行相关的业务规则。 - **View(视图)...
当用户提交表单后,Struts2会根据表单字段名称自动寻找相应的Action类中的VO对象及其属性,并将表单数据填充到这些属性中。 例如,如果表单中有两个字段`user.username`和`user.password`,那么Struts2将会尝试将这...
- FormBean是Struts中的模型组件,用于在视图和控制器之间传递数据。 - 在`struts-config.xml`中定义FormBean,并在Action类中使用get和set方法访问其属性。 11. **JSP页面**: - JSP页面负责显示数据和接收用户...
在Struts1中,通常需要FormBean来处理表单数据,而Action负责业务逻辑处理。而在Struts2中,这些职责被合并到了一起。开发者可以直接在Action中读写成员变量,不再需要专门的FormBean或LazyBean。此外,也不再需要从...
4. **struts-bean.jar** 和 **struts-html.jar**:这两个库文件在较早版本的Struts中使用,现在已被struts-core.jar整合,提供了ActionForm和一些HTML相关的标签。 5. **commons-logging.jar**:Struts依赖于Apache...
2. `<html:text>`:用于创建输入文本字段,其`name`属性对应ActionForm中的属性名,这样表单提交后,Struts框架会自动将该字段的值绑定到对应的ActionForm属性。 3. `<html:password>`:与`<html:text>`类似,但...
此外,Struts2的类型转换也更为智能,它可以自动将HTTP请求参数转换为Action字段的期望类型,减少了手动转换的工作。 在开发方面,Struts2提供了更多选择,比如OGNL(Object-Graph Navigation Language)作为默认...
Action类需要继承`org.apache.struts.action.Action`,并且表单数据通常封装在FormBean中。为了获取这些数据,开发者需要将Bean存入Page、Request或Session范围。 - **Struts2** 则是一个pull-MVC架构,它允许...
Struts1.x 必须继承org.apache.struts.action.Action或者其子类,表单数据封装在FormBean中。Struts 2无须继承任何类型或实现任何接口,表单数据包含在Action中,通过Getter和Setter获取。 虽然,在理论上Struts2的...
在请求处理过程中,Struts 会自动将请求参数绑定到 FormBean 中,方便业务逻辑的处理。同时,FormBean 也可以作为模型层与视图层之间的桥梁,传递数据到 JSP 页面进行显示。 **3. FormBean:** FormBean 是一种特殊...
Struts1的配置主要在struts-config.xml文件中进行,包括Action映射、FormBean定义和Plug-In配置等。 - **MVC架构**:Struts1遵循MVC设计模式,使得开发者可以将业务逻辑、数据模型和用户界面分离,提高代码的可重用...
在向导中,指定usecase为“userLogin”,FormBean的名称通常与struts-config.xml中的`<form-bean>`定义相匹配。添加表单属性(如用户名和密码),并选择是否自动生成Struts表单输入页面。在Methods标签页,根据需求...
而ActionForm方式则是基于传统的Struts1的FormBean,将验证规则放在单独的Form类中。 在实际项目中,你可能还会遇到一些高级用法,比如自定义Validator,用于处理复杂的验证需求。这可以通过实现`org.apache.struts...
Struts 中数据在 Action 与 JSP 中的传递总结 Struts 框架中,数据在 Action 与 JSP 之间的传递是一种常见的需求。为了实现这种传递,Struts 提供了多种方式,本文将对这些方式进行总结。 方式一:通过 FormBean ...