如何保存ActionForm中未编辑的字段为NULL

来源:互联网 发布:看门狗2优化 编辑:程序博客网 时间:2024/04/29 09:17

        Struts中,如果ActionForm里某些字段没有编辑(即没有输入值),提交后直接保存到数据库时,这些字段保存为""(String)或0(int),可是在实际开发中,可能需要将其保存位null,如何实现呢?

 最直观的办法:判断字段是否为空,如果为空,则返回null

最简单的办法:修改ActionServlet配置下init-param,具体如下

ActionServlet配置下init-param:
<init-param>
<param-name>convertNull</param-name>
<param-value>true</param-value>
</init-param>

最近又看到一个办法:用自己的ActionServlet类覆盖原有的ActionServlet,在自己的ActionServlet类中,重载init()方法,为struts解析重新注册一些改造过的表单元素数据解析方法,设定各种类型的默认值为null,代码如下:

/**
 * 用户自己的 ActionServlet 实现类,覆盖 struts 的 ActionServlet
 * <p>Title: </p>
 * <p>Description: 2006-01-13</p>
 * <p>Copyright: Copyright (c) 2006</p>
 * <p>Company: eqzhou</p>
 * @author eqzhou
 * @version 1.0
 */
public class MyActionServlet extends ActionServlet {

  /**
   * 重载init()方法
   * 为struts解析重新注册一些改造过的表单元素数据解析方法
   */
  public void init() throws ServletException {
      super.init();
//      ConvertUtils.register(new BigDecimalConverter(null), BigDecimal.class);
//      ConvertUtils.register(new BigIntegerConverter(null), BigInteger.class);
//      ConvertUtils.register(new FloatConverter(null), Float.class);
//      ConvertUtils.register(new IntegerConverter(null), Integer.class);
//      ConvertUtils.register(new LongConverter(null), Long.class);
//      ConvertUtils.register(new ShortConverter(null), Short.class);
//      ConvertUtils.register(new SqlTimeConverter(null), Time.class);
//      ConvertUtils.register(new SqlTimestampConverter(null), Timestamp.class);

      /*
       * Struts的 actionForm 的属性的类型如果为 java.sql.Date 的时候,则不可以为 null,
       * 以下方法,使其可以为 null .
       */
      ConvertUtils.register(new SqlDateConverter(null), Date.class);

  }

}

然后在web.xml中,配置为你的 MyActionServlet
  <servlet>
    <servlet-name>action</servlet-name>
    <servlet-class>这里可以是你的包的路径.MyActionServlet </servlet-class>
    <init-param>
      <param-name>config</param-name>
      <param-value>/WEB-INF/struts-config.xml</param-value>
    </init-param>
    <init-param>
      <param-name>debug</param-name>
      <param-value>2</param-value>
    </init-param>
    <load-on-startup>2</load-on-startup>
  </servlet>