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实例,否则返回null。 标签"验证ActionForm存到了request中.rar"进一步强调了这个验证的过程,可能是为了确保开发者在处理请求时没有遗漏这个重要的...
在这个类中,为每个表单字段声明对应的属性,并提供getter和setter方法。 3. **添加验证逻辑** 在ActionForm中,我们可以通过重写`validate()`方法来实现表单验证。这个方法会在Action执行之前调用,如果验证失败...
在Struts框架中,ActionForm类是用于封装请求参数并传递到Action类进行业务逻辑处理的关键组件。当ActionForm中的属性涉及到对象数组时,处理方式就变得稍微复杂一些。以下将详细介绍如何处理ActionForm属性中存在...
2. 在 Action 中将传入的 ActionForm 中的文件字段赋给 VO 值对象,并调用业务代理类的上传方法。 3. 在业务代理类中,调用 DAO 中的上传方法,将大对象上传到数据库中。 在 DAO 中,我们需要使用 ...
在Spring框架中,如果需要在ActionForm中注入其他对象,例如数据库访问层的服务,可能会遇到问题,因为ActionForm通常是非Spring管理的bean。 针对这个问题,一种解决办法是将注入的属性声明为静态,并修改setter...
本篇文章将深入探讨在Struts中FormBean的日期类型字段如何进行赋值以及自动转化。 一、FormBean的概念与作用 FormBean是Struts中的一种特殊Java类,用于封装HTTP请求中的参数。它们通常继承自`org.apache.struts....
在Struts框架中,如果表单中的日期字段为空或未填写,而在后台JavaBean中对应的字段类型为`java.sql.Date`,则会导致程序运行时出现异常。这是因为Struts框架在封装表单数据时,会尝试将表单中的字符串转换为对应的...
首先,我们需要创建一个ActionForm类,该类继承自Struts1的BaseActionForm,并且为每个需要校验的字段添加getter和setter方法。例如,如果我们有一个用户注册表单,可能会有用户名、密码等字段,我们会在ActionForm...
为了进行验证,我们需要在ActionForm中定义一个或多个JavaBean属性,每个属性对应表单中的一个字段,并且可以有对应的验证规则。 在Struts配置文件(struts-config.xml)中,我们可以为每个Action配置一个Form Bean...
本文将详细讲解Struts中的表单验证机制,包括ActionForm Bean的使用、validate()方法和reset()方法,以及如何处理验证错误。 首先,ActionForm Bean是Struts框架中用于存储和管理用户输入数据的Java对象。它需要...
- 表单验证:发生在ActionForm Bean中,确保用户输入符合表单字段的要求。 - 业务逻辑验证:发生在Action中,基于特定业务规则进行验证。 4. **Form Bean的表单验证流程**: - 用户提交表单,数据自动填充到...
在这个例子中,我们将`username`和`password`字段重置为空字符串。 #### 四、配置文件中的验证规则 除了在`ActionForm`类中实现验证逻辑外,还可以在Struts配置文件(如`struts-config.xml`)中定义更复杂的验证...
在这个例子中,我们需要定义一个名为`MultiForm`的ActionForm类,它包含了两个字段:`file`和`name`。其中`file`是一个`FormFile`类型的对象,用于接收上传的文件;`name`是一个字符串,用于存储图片名称。 ```java...
例如,在Struts 1.2版本中,`ActionForm`并未为`java.util.Date`类型的数据(尽管默认支持`java.sql.Date`)提供类型转换功能。 #### 解决方案一:在Form中使用String类型表示日期,并在Action中进行类型转换 1. **...
当用户没有提供符合预期格式的日期字符串,或者表单字段未包含任何值时,`DateUtils`无法正确地创建`Date`对象,这就会导致`java.util.Date`类型的表单字段初始化失败,表现为null或者错误的日期值。解决这个问题有...
1. **isBlankOrNull**:检查字段是否为空或null。 2. **isByte/isInt/isLong/isFloat/isDouble**:验证字段是否可以转换为相应的数字类型。 3. **isCreditCard/isEmail**:检查字段是否符合信用卡号或电子邮件地址的...
3. **配置Struts-config.xml**:在项目的`struts-config.xml`文件中,需要配置你的ActionForm类和Action类,并指定`validate`方法将使用的表单字段。 ```xml ``` 在这里,`<validate/>`标签告诉...
以上是Spring+Hibernate将文件二进制数据持久化到数据库的解决方案,而Struts通过将表单中file类型的组件映射为ActionForm中类型为org.apache.struts.upload. FormFile的属性来获取表单提交的文件数据。 工程...
在这里,你可以指定ActionForm类以及表单字段与请求参数的映射关系。例如: ```xml ``` 在视图层,Struts可以使用OGNL(Object-Graph Navigation Language)表达式语言来访问ActionForm中的属性...
2. **编写验证规则**:在XML配置文件(如validation.xml)中,定义每个表单字段的验证规则,或者在ActionForm的属性上使用注解。 3. **实现ActionForm**:ActionForm类是Struts接收和处理用户输入的地方,你需要在...