前面整理了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>
这样也可以达到我们目的,但这两种做法哪个更好,在下就搞不明白了。![](/images/smiles/icon_sad.gif)
附件是我测试用的DEMO,实现了JavaBean中日期的转化和Struts的FormBean中日期的转化,及两种Struts下注册方法(插件方式、过滤器方式)。
分享到:
相关推荐
Struts1.2动态FormBean 加 验证功能 的一个例子
2.Struts2和Struts1.x的... Struts1.x 必须继承org.apache.struts.action.Action或者其子类,表单数据封装在FormBean中。 Struts 2无须继承任何类型或实现任何接口,表单数据包含在Action中,通过Getter和Setter获取。
Struts1.x 必须继承org.apache.struts.action.Action或者其子类,表单数据封装在FormBean中。Struts 2无须继承任何类型或实现任何接口,表单数据包含在Action中,通过Getter和Setter获取。 虽然,在理论上Struts2的...
Struts 中数据在 Action 与 JSP 中的传递总结 Struts 框架中,数据在 Action 与 JSP 之间的传递是一种常见的需求。为了实现这种传递,Struts 提供了多种方式,本文将对这些方式进行总结。 方式一:通过 FormBean ...
利用java反射校验struts中的formbean 在struts框架中,如果每次都去校验form中的每个字段,显然费时费力,本例通过java反射得到form中的字段和值,并较验,用于在与数据库交互之前的校验,从而防止数据库恶意注入. 随包...
在 Struts 中,Controller 是一个 Servlet,称为 ActionServlet。ActionServlet 负责截取和分发 HTTP 请求到相应的动作类。动作类用于实现核心商业逻辑,可以访问 Java Bean 或调用 EJB。 5. View View 主要由 JSP...
在struts2中已经不需要struts1中的formbean了。在struts1中每次提交表单的时候,表单中的属性值都先赋予formbean,然后操作formbean。但是现在struts2中用对象.属性名来给对象赋值,然后操作这个对象。而这些对象都...
4.action执行完后要返回显示的结果视图,这个结果视图是用一个ActionForward对象来表示的,actionforward对象通过struts-config.xml配置文件中的配置关联到某个jsp页面,因为程序中使用的是在struts-config.xml...
在弹出的菜单中,根据图例提示,选择Myeclipse后在弹出的二级菜单中选择Add Struts Capabilities…后提示如下图所示: 在弹出的对话框中,设置如下: Struts config path:默认,一般不需要改变。 Struts ...
FormBean是Struts框架中的表单bean,负责处理用户输入的数据。在图书管理系统中,FormBean可以设计为处理图书信息的输入和验证。 4.视图设计 视图层是Struts框架中的Presentation层,负责显示数据。在图书管理系统...
传智播客的struts高级实战进阶 MVC模式的回顾 回顾Struts的请求处理时序图 使用超连接的技巧 封装Formbean数据时的问题 防止表单重复提交 使用复选框的技巧 使用下拉列表框的技巧 文件上传 DispatchAction的应用 ...
NULL 博文链接:https://haixiami200411.iteye.com/blog/736554
流程:在Struts中,用户的请求一般以*.do作为请求服务名,所有的*.do请求均被指向ActionSevlet,ActionSevlet根据Struts-config.xml中的配置信息,将用户请求封装成一个指定名称的FormBean,并将此FormBean传...
ClassName 属性指定了 FormBean 的实现类,name 属性指定了 FormBean 的名称,type 属性指定了 FormBean 的类型。 在 Form-bean 元素中,我们可以使用 Form-property 元素来设置 FormBean 的属性。Form-property ...
----Struts 使用技巧---- 1 Struts validate 1.1 使用ActionForm的validate()验证 ...> 配置FormBean: 配置FormBean中的validate()方法,处理相关验证; > 配置Jsp:配置JSP中相关信息接受后台验证信息的处理结果;
介绍如何使用动态formbean的例子
在Struts中几种情况可以使标签初始就是选中的,Formbean里面该Property的值设为 1.on 、2.yes 、3.true 这三种情况都是可以实现默认选中的。 注:如果不选中,最好把Property的设置为””,因为在Action中得到...
7. struts框架中,关于FormBean,下列哪些说法是正确的: A FormBean是一种数据bean,主要用来封装表单提交上来的数据,并把这些数据传递给Action B 在FormBean中可以对页面上传递来的参数进行一下格式上的验证...