`
fish119
  • 浏览: 149314 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

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

    博客分类:
  • Java
阅读更多

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> 
 
分享到:
评论

相关推荐

    验证ActionForm存到了request中

    如果ActionForm已存在于request中,这两个方法都将返回ActionForm实例,否则返回null。 标签"验证ActionForm存到了request中.rar"进一步强调了这个验证的过程,可能是为了确保开发者在处理请求时没有遗漏这个重要的...

    struts1使用actionform实现表单验证

    在这个类中,为每个表单字段声明对应的属性,并提供getter和setter方法。 3. **添加验证逻辑** 在ActionForm中,我们可以通过重写`validate()`方法来实现表单验证。这个方法会在Action执行之前调用,如果验证失败...

    ActionForm属性中存在对象数组如何处理

    在Struts框架中,ActionForm类是用于封装请求参数并传递到Action类进行业务逻辑处理的关键组件。当ActionForm中的属性涉及到对象数组时,处理方式就变得稍微复杂一些。以下将详细介绍如何处理ActionForm属性中存在...

    使用JAVA读取ORACLE_BLOB字段实现上传下载.doc

    2. 在 Action 中将传入的 ActionForm 中的文件字段赋给 VO 值对象,并调用业务代理类的上传方法。 3. 在业务代理类中,调用 DAO 中的上传方法,将大对象上传到数据库中。 在 DAO 中,我们需要使用 ...

    特殊情况(ActionForm,Servlet, Filter, Listener)下Spring如何注入对象

    在Spring框架中,如果需要在ActionForm中注入其他对象,例如数据库访问层的服务,可能会遇到问题,因为ActionForm通常是非Spring管理的bean。 针对这个问题,一种解决办法是将注入的属性声明为静态,并修改setter...

    Struts中FormBean的日期类型字段赋值自动转化

    本篇文章将深入探讨在Struts中FormBean的日期类型字段如何进行赋值以及自动转化。 一、FormBean的概念与作用 FormBean是Struts中的一种特殊Java类,用于封装HTTP请求中的参数。它们通常继承自`org.apache.struts....

    strust-Date问题解决

    在Struts框架中,如果表单中的日期字段为空或未填写,而在后台JavaBean中对应的字段类型为`java.sql.Date`,则会导致程序运行时出现异常。这是因为Struts框架在封装表单数据时,会尝试将表单中的字符串转换为对应的...

    struts1校验框架

    首先,我们需要创建一个ActionForm类,该类继承自Struts1的BaseActionForm,并且为每个需要校验的字段添加getter和setter方法。例如,如果我们有一个用户注册表单,可能会有用户名、密码等字段,我们会在ActionForm...

    Struts-Validate-Reset

    为了进行验证,我们需要在ActionForm中定义一个或多个JavaBean属性,每个属性对应表单中的一个字段,并且可以有对应的验证规则。 在Struts配置文件(struts-config.xml)中,我们可以为每个Action配置一个Form Bean...

    关于struts表单验证

    本文将详细讲解Struts中的表单验证机制,包括ActionForm Bean的使用、validate()方法和reset()方法,以及如何处理验证错误。 首先,ActionForm Bean是Struts框架中用于存储和管理用户输入数据的Java对象。它需要...

    java面试知识点总结--Struts.pdf

    - 表单验证:发生在ActionForm Bean中,确保用户输入符合表单字段的要求。 - 业务逻辑验证:发生在Action中,基于特定业务规则进行验证。 4. **Form Bean的表单验证流程**: - 用户提交表单,数据自动填充到...

    Struts 表单验证 实例

    在这个例子中,我们将`username`和`password`字段重置为空字符串。 #### 四、配置文件中的验证规则 除了在`ActionForm`类中实现验证逻辑外,还可以在Struts配置文件(如`struts-config.xml`)中定义更复杂的验证...

    用Struts向MySQL中储存图片

    在这个例子中,我们需要定义一个名为`MultiForm`的ActionForm类,它包含了两个字段:`file`和`name`。其中`file`是一个`FormFile`类型的对象,用于接收上传的文件;`name`是一个字符串,用于存储图片名称。 ```java...

    javaweb编程中常见的异常及处理方法.doc

    例如,在Struts 1.2版本中,`ActionForm`并未为`java.util.Date`类型的数据(尽管默认支持`java.sql.Date`)提供类型转换功能。 #### 解决方案一:在Form中使用String类型表示日期,并在Action中进行类型转换 1. **...

    struts的form不能初始化java.util.Date类型

    当用户没有提供符合预期格式的日期字符串,或者表单字段未包含任何值时,`DateUtils`无法正确地创建`Date`对象,这就会导致`java.util.Date`类型的表单字段初始化失败,表现为null或者错误的日期值。解决这个问题有...

    Struts Validator验证框架详细讲解.txt

    1. **isBlankOrNull**:检查字段是否为空或null。 2. **isByte/isInt/isLong/isFloat/isDouble**:验证字段是否可以转换为相应的数字类型。 3. **isCreditCard/isEmail**:检查字段是否符合信用卡号或电子邮件地址的...

    struts1.2 validate 源代码 实现

    3. **配置Struts-config.xml**:在项目的`struts-config.xml`文件中,需要配置你的ActionForm类和Action类,并指定`validate`方法将使用的表单字段。 ```xml ``` 在这里,`&lt;validate/&gt;`标签告诉...

    ssh(structs,spring,hibernate)框架中的上传下载

     以上是Spring+Hibernate将文件二进制数据持久化到数据库的解决方案,而Struts通过将表单中file类型的组件映射为ActionForm中类型为org.apache.struts.upload. FormFile的属性来获取表单提交的文件数据。  工程...

    struts日期的处理

    在这里,你可以指定ActionForm类以及表单字段与请求参数的映射关系。例如: ```xml ``` 在视图层,Struts可以使用OGNL(Object-Graph Navigation Language)表达式语言来访问ActionForm中的属性...

    validator框架的应用

    2. **编写验证规则**:在XML配置文件(如validation.xml)中,定义每个表单字段的验证规则,或者在ActionForm的属性上使用注解。 3. **实现ActionForm**:ActionForm类是Struts接收和处理用户输入的地方,你需要在...

Global site tag (gtag.js) - Google Analytics