ActionSupport 表单验证

简介: 引用:http://tech.hexun.com/2009-05-27/118120173.html http://book.51cto.com/art/200905/125865.htm 2.8 增加数据校验     在上面应用中,即使浏览者不输入任何用户名、密码,系统也会处理用户请求。

引用:http://tech.hexun.com/2009-05-27/118120173.html

http://book.51cto.com/art/200905/125865.htm

2.8 增加数据校验

 

  在上面应用中,即使浏览者不输入任何用户名、密码,系统也会处理用户请求。在我们整个HelloWorld应用中,这种空用户名、空密码的情况不会引起太大的问题。但如果数据需要保存到数据库,或者需要根据用户输入的用户名、密码查询数据,这些空输入可能引起异常。

  为了避免用户的输入引起底层异常,通常我们会在进行业务逻辑操作之前,先执行基本的数据校验。

  2.8.1 继承ActionSupport

  ActionSupport类是一个工具类,它已经实现了Action接口。除此之外,它还实现了Validateable接口,提供了数据校验功能。通过继承该ActionSupport类,可以简化Struts2的Action开发。

  在Validatable接口中定义了一个validate()方法,重写该方法,如果校验表单输入域出现错误,则将错误添加到ActionSupport类的fieldErrors域中,然后通过OGNL表达式负责输出。

  为了让Struts2增加输入数据校验的功能,改写程序中的LoginAction,增加重写validate方法。修改后的LoginAction类代码如下:

  程序清单:codes\02\2.8\validate1\WEB-INF\src\lee\LoginAction.java

  上面的Action类重写了validate方法,该方法会在执行系统的execute方法之前执行,如果执行该方法之后,Action类的fieldErrors中已经包含了数据校验错误,请求将被转发到input逻辑视图处。

  为了在校验失败后能将转入名为input的逻辑视图,必须在配置该Action时指定input属性。下面是修改后的loginAction的配置片段:

  程序清单:codes\02\2.8\validate1\WEB-INF\src\struts.xml

  <!--定义login的Action,该Action的实现类为lee.LoginAction类--><actionname="login" class="lee.LoginAction"><!--定义处理结果和视图资源之间映射关系--><!--定义input的逻辑视图名,对应login.jsp页面--><resultname="input">/login.jsp</result><resultname="error">/error.jsp</result><resultname="success">/welcome.jsp</result></action>

  对比上面的Action配置与前面的Action配置,我们发现该Action配置片段中增加了input逻辑视图的配置,该逻辑视图映射到login.jsp页面。

  前面已经提到:当用户提交请求时,请求得到execute方法处理之前,先会被validate方法处理,如果该方法处理结束后,Action的fieldErrors里的校验错误不为空,请求将被转发给input逻辑视图。如果我们不输入用户名、密码而直接提交表单,将看到如图2.13所示的界面。

 
(点击查看大图)图2.13 输入校验的界面

  看到这里也许读者觉得非常神奇:我们仅仅在Action添加了数据校验错误,并未在输入页面输出这些校验错误信息,但图2.13所示的页面,却可以看到页面已经输出了这些校验信息--这是因为Struts2的标签,上面的JSP页面中表单使用的并不是HTML表单,而是用了<s:form.../>标签,Struts2的<s:form ... />标签已经具备了输出校验错误的能力。

 

  注意 Struts 2的<s:form .../>默认已经提供了输出校验错误的能力。

  但上面的程序还存在一个问题:校验信息的国际化。查看上面的Action类代码发现:重写validate方法时,如果发生校验失败的问题,校验错误的提示信息是以硬编码方式写死了--这就失去了国际化的能力。

  实际上,ActionSupport类已经提供了国际化信息的能力,它提供了一个getText(Stringkey)方法,该方法用于从资源文件中获取国际化信息。为了让校验信息支持国际化,再次改写Action里的validate方法,改写后的validate方法代码如下:

  程序清单:codes\02\2.8\validate1\WEB-INF\src\lee\LoginAction.java

  在上面的validate方法中,添加校验错误提示时,并不是直接给出了错误提示的字符串,而是调用了getText(key)方法来获取错误提示。因为在Action中,使用getText(key)方法获取了两个国际化提示:user.required和pass.required,因此应该在国际化资源文件中添加这两条提示信息。

  提示ActionSupport增加了让提示信息国际化的能力,ActionSupport提供的getText(key)方法可以根据资源文件加载获得国际化提示信息。

  此时,如果没有任何输出,直接提交登录表单,将看到如图2.14所示的界面。

 
(点击查看大图)图2.14 国际化数据校验的错误提示
相关文章
|
27天前
|
人工智能 前端开发 物联网
表单验证
表单验证
13 1
|
4月前
|
JavaScript 前端开发
Javascript的form表单校验输入框
Javascript的form表单校验输入框
24 0
|
4月前
|
移动开发 前端开发 JavaScript
Vue3中表单相关的知识:表单绑定、表单验证、表单处理
Vue3中表单相关的知识:表单绑定、表单验证、表单处理
74 0
|
4月前
ElementUI之CUD+表单验证
ElementUI之CUD+表单验证
22 0
|
5月前
|
前端开发 关系型数据库 API
关于一篇ElementUI之CUD+表单验证
关于一篇ElementUI之CUD+表单验证
27 0
|
6月前
62EasyUI 表单 - 表单验证
62EasyUI 表单 - 表单验证
20 0
|
数据采集 数据安全/隐私保护 开发者
普通的表单验证 | 学习笔记
快速学习普通的表单验证
|
JavaScript 前端开发
EasyUI之表单验证
当我们开发一个管理类项目的时候,EasyUI是我常用的一个jquery框架,而表单验证显然是我们必须要实现的功能,而使用基于EasyUI的验证功能就比较简便了,本文来介绍下具体的用法
EasyUI之表单验证
|
前端开发 JavaScript 数据安全/隐私保护
Jquery表单验证
用JQuery实现添加用户(用户注册登录同理)表单验证功能
Jquery表单验证
|
JavaScript 前端开发
JQuery实现注册表单验证
效果图如下: 注册页面HTML代码如下: 美多商城-注册 商品美 · 种类多 · 欢迎光临 用户注册 登录 用户名: ...
1652 0