保存ActionForm中未编辑的字段为NULL,尤其整数不赋0值

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

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

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

ActionServlet配置下init-param:

1 <init-param>
2 <param-name>convertNull</param-name>
3 <param-value>true</param-value>
4 </init-param>  

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

 1 /**
 2  * 用户自己的 ActionServlet 实现类,覆盖 struts 的 ActionServlet
 3  * <p>Title: </p>
 4  * <p>Description: 2006-01-13</p>
 5  * <p>Copyright: Copyright (c) 2006</p>
 6  * <p>Company: eqzhou</p>
 7  * @author eqzhou
 8  * @version 1.0
 9  */
10 public class MyActionServlet extends ActionServlet {
11
12   /**
13    * 重载init()方法
14    * 为struts解析重新注册一些改造过的表单元素数据解析方法
15    */
16   public void init() throws ServletException {
17       super.init();
18 //      ConvertUtils.register(new BigDecimalConverter(null), BigDecimal.class);
19 //      ConvertUtils.register(new BigIntegerConverter(null), BigInteger.class);
20 //      ConvertUtils.register(new FloatConverter(null), Float.class);
21 //      ConvertUtils.register(new IntegerConverter(null), Integer.class);
22 //      ConvertUtils.register(new LongConverter(null), Long.class);
23 //      ConvertUtils.register(new ShortConverter(null), Short.class);
24 //      ConvertUtils.register(new SqlTimeConverter(null), Time.class);
25 //      ConvertUtils.register(new SqlTimestampConverter(null), Timestamp.class);
26
27       /*
28        * Struts的 actionForm 的属性的类型如果为 java.sql.Date 的时候,则不可以为 null,
29        * 以下方法,使其可以为 null .
30        */
31       ConvertUtils.register(new SqlDateConverter(null), Date.class);
32
33   }
34
35 }

然后在web.xml中,配置 MyActionServlet

 1 <servlet>
 2     <servlet-name>action</servlet-name>
 3     <servlet-class>这里可以是你的包的路径.MyActionServlet </servlet-class>
 4     <init-param>
 5       <param-name>config</param-name>
 6       <param-value>/WEB-INF/struts-config.xml</param-value>
 7     </init-param>
 8     <init-param>
 9       <param-name>debug</param-name>
10       <param-value>2</param-value>
11     </init-param>
12     <load-on-startup>2</load-on-startup>
13   </servlet> 

保存ActionForm中未编辑的字段为NULL,尤其整数不赋0值

时间: 2024-11-05 12:12:07

保存ActionForm中未编辑的字段为NULL,尤其整数不赋0值的相关文章

WordPress数据库中的表、字段、类型及说明

wp_categories: 用于保存分类相关信息的表.包括了5个字段,分别是: cat_ID – 每个分类唯一的ID号,为一个bigint(20)值,且带有附加属性auto_increment. cat_name – 某个分类的名称,为一个varchar(55)值. category_nicename – 指定给分类的一个便于记住的名字,也就是所谓的slug,这是一个varchar(200)值. category_description – 某个分类的详细说明,longtext型值. cate

iOS开发 Xcode中的Info.plist字段含义

Info.plist用于向iOS提供关于app,bundle或者framework的一些重要信息.它指定了比如一个应用应该怎样启动,它如何被本地化,应用的名称,要显示的图标,还有更多.Info.plist文件实际上是苹果预定义schema的XML文件. 为了构建一个设备相关的健,你在健的后面要加上~iphone或者~ipad. 常用字段: 1.获取版本信息: NSDictionary*infoDic = [[NSBundle mainBundle] infoDictionary]; NSStri

Xcode中的Info.plist字段列表详解

Info.plist用于向iOS提供关于app,bundle或者framework的一些重要信息.它指定了比如一个应用应该怎样启动,它如何被本地化,应用的名称,要显示的图标,还有更多.Info.plist文件实际上是苹果预定义schema的XML文件. 为了构建一个设备相关的健,你在健的后面要加上~iphone或者~ipad. 常用字段:   1.获取版本信息: NSDictionary*infoDic = [[NSBundle mainBundle] infoDictionary]; NSSt

可编辑的表格:jQuery+PHP实现实时编辑表格字段内容

在本例中,我们会通过jQuery实现单击将一个文本信息变为可编辑的表单,你可以对文本内容进行编辑,然后点击“确定”按钮,新的内容将发送到后台PHP程序处理,并保存到数据库:当点击“取消”按钮,则页面恢复到初始状态. 查看演示 下载源码 本例适用场景:当查看详细资料,如用户详情信息,发现其中某几个字段信息需要修改,可直接点击该字段内容进行修改,节约了用户时间,(传统的做法是进入一个编辑页面,列出所有编辑的字段信息,即使你只需要编辑其中一两个字段内容,然后点击提交)提高了WEB响应速度,从而提高了前

Django中ORM介绍和字段及其参数

ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中. ORM在业务逻辑层和数据库层之间充当了桥梁的作用. ORM的由来 字母‘O’起源于“对象”(Object),'R'代表“关系”(Relational). 几乎所有的软件开发过程中都会涉及到对象和关系数据库.在用户层面和业务逻辑层

使用脚本删除ios工程中未使用图片

最近在读唐巧大神的<iOS开发进阶>,学到了一个大招:使用脚本删除ios中未使用的图片(纸书上有点小问题,参考github上的issue:使用脚本删除ios中未使用图片). issue中得到的建议是:将代码保存在一个.sh文件中,在xcode里面执行shell脚本文件.看到这里,头瞬间大了,大学学的shell都还给linux老师了....还有xcode中怎么执行脚本啊??? google一下,找到mac下创建.sh文件的小白方法:教你在mac上面创建可执行脚本文件.当然还有XCode中执行脚本

如何将Sql server数据库中的模型图转化到Word中--并能够查看字段的属性信息

1. 在Sql server数据库中创建数据库的模型图 -- Database Diagrams 2. 控制面板--管理工具--ODBC数据源链接--创建一个Sql server的数据源链接 3. 打开Visio工具,打开数据库模型--Database--Reverse Engineer[反向工程] 选择要导入到Visio中的表: 4. 将DB的表结构导入到Visio中,界面可能需要略微调整一下 可以在Visio中查看字段的详细信息 将Visio保存成一个文件. 5.打开Word,插入对象 将V

oracle暂时表空间 ORA-01652:无法通过16(在表空间XXX中)扩展 temp 字段

今天在查数据的时候报错  ORA-01652:无法通过16(在表空间temp1中)扩展 temp 字段 查看表空间使用明细 SELECT b.tablespace, b.segfile#, b.segblk#, b.blocks, b.blocks * 32 / 1024 / 1024, a.sid, a.serial#, a.username, a.osuser, a.status, c.sql_text, b.contents FROM v$session a, v$sort_usage b

oracle临时表空间 ORA-01652:无法通过16(在表空间XXX中)扩展 temp 字段

今天在查数据的时候报错  ORA-01652:无法通过16(在表空间temp1中)扩展 temp 字段 查看表空间使用明细 SELECT b.tablespace, b.segfile#, b.segblk#, b.blocks, b.blocks * 32 / 1024 / 1024, a.sid, a.serial#, a.username, a.osuser, a.status, c.sql_text, b.contents FROM v$session a, v$sort_usage b