- 浏览: 344720 次
- 性别:
- 来自: 成都
文章分类
- 全部博客 (97)
- 搜索引擎 (9)
- JAVA基础知识 (7)
- Struts (13)
- Spring (1)
- Hibernate (0)
- iBATIS (2)
- ExtJs (10)
- AJAX (0)
- Oracle (1)
- MSSQLSERVER (1)
- MySQL (0)
- Prototype (0)
- DWR (0)
- EJB (0)
- J2EE综合 (0)
- 算法 (1)
- WebServices (0)
- JMS (0)
- JavaMail (0)
- JMX (0)
- UML (0)
- Dojo (0)
- Acegi (2)
- 其他Html-XML等 (3)
- CSS (1)
- 其他开源项目 (0)
- 英语 (0)
- Web3D (24)
- FCKeditor (1)
- javascript 特效 (2)
最新评论
-
荷戟者:
如何实现的,是否可以想象一点
extjs实现左侧tab -
coconut_zhang:
怎么没人评论,吼吼。。
HTMLParser使用详解(4)- 通过Visitor访问内容 -
Sorry':
JDBC中处理存储过程的结果集的通用流程 -
Sorry':
计划将客户
JDBC中处理存储过程的结果集的通用流程 -
renhongchao:
very good!在csdn也看到相同的文章,莫非是同一人? ...
HTMLParser使用详解(3)- 通过Filter访问内容
转换与校验(Conversion & Validation)
其实上篇文章,我本来是打算写表单数据校验的内容,但是经过再三思考后,还是决定先写Struts 2.0转换器的内容。原因是我认为转换是校验的基础,只有在数据被正确地转换成其对应的类型后,我们才可以对其取值范围进行校验。看个例子相信大家可以更清楚。现在我们就来改造一下《转换器(Converter)——Struts 2.0中的魔术师》的第一个例子。
首先,从Action开始,修改后的代码如下:
import java.util.Locale;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.util.LocalizedTextUtil;
public class HelloWorld extends ActionSupport {
private String msg;
private Locale loc = Locale.US;
public String getMsg() {
return msg;
}
public Locale getLoc() {
return loc;
}
public void setLoc(Locale loc) {
this .loc = loc;
}
@Override
public void validate() {
System.out.println( " Calling validate() " );
if ( ! (loc.equals(Locale.US) || loc.equals(Locale.CHINA))) {
addFieldError( " loc " , getText( " validation.loc " ));
}
}
public void validateExecute() {
System.out.println( " Calling validateExecute() by reflection " );
}
@Override
public String execute() {
System.out.println( " Calling execute() " );
// LocalizedTextUtil是Struts 2.0中国际化的工具类,<s:text>标志就是通过调用它实现国际化的
msg = LocalizedTextUtil.findDefaultText( " HelloWorld " , loc);
return SUCCESS;
}
}
然后,修改Struts.xml中Action的定义指明输入地址:
< result > /HelloWorld.jsp </ result >
< result name ="input" > /HelloWorld.jsp </ result >
</ action >
接着,在HelloWorld.jsp中加入错误提示:
<% @taglib prefix = " s " uri = " /struts-tags " %>
< html >
< head >
< title > Hello World </ title >
</ head >
< body >
< div style ="color:red;" >
< s:fielderror />
</ div >
< s:form action ="HelloWorld" theme ="simple" >
Locale: < s:textfield name ="loc" /> < s:submit />
</ s:form >
< h2 >< s:property value ="msg" /></ h2 >
</ body >
</ html >
再修改LocaleConverter.java文件,将内容改为:
import java.util.Locale;
import java.util.Map;
import java.util.regex.Pattern;
public class LocaleConverter extends ognl.DefaultTypeConverter {
@Override
public Object convertValue(Map context, Object value, Class toType) {
if (toType == Locale. class ) {
System.out.println( " Converting String to Locale " );
String locale = ((String[]) value)[ 0 ];
return new Locale(locale.substring( 0 , 2 ), locale.substring( 3 ));
} else if (toType == String. class ) {
System.out.println( " Converting Locale to String " );
Locale locale = (Locale) value;
return locale.toString();
}
return null ;
}
}
之后,修改国际化资源文件,内容为:
invalid.fieldvalue.loc = Locale必须为\ " xx_XX\ " 的格式
validation.loc = 区域必须为中国或美国
invalid.fieldvalue.loc = Locale must like \ " xx_XX\ "
validation.loc = Locale must be China or USA
发布运行应用程序,在浏览器中键入http://localhost:8080/Struts2_Validation/HelloWorld.action,在Locale中输入zh_CN,按“Submit”提交,效果如上篇文章所示。而在服务器控制台有如下输出:
Calling validateExecute() by reflection...
Calling validate()...
Calling execute()...
Converting Locale to String...
上述的输出说明了Struts 2.0的数据校验工作方式,它需要经过下面几个步骤:
- 通过转换器将请求参数转换成相应的Bean属性;
- 判断转换过程是否出现异常。如果有,则将其保存到ActionContext中,conversionError拦截器再封装为fieldError;如果没有,进行下一步;
- 通过反射(Reflection)来调用validateXxx()方法(其中,Xxx表示Action的方法名);
- 调用validate()方法;
- 如果经过上述步骤没有出现fieldError,则调用Action方法;如果有,则会跳过Action方法,通过国际化将fieldError输出到页面。
不喜欢看文字的朋友,可以参考下面的图1。
图1 校验顺序图
看到这里可能大家会疑问:“这么多地方可以校验表单数据,到底我应该在那里做呢?”有选择是好事,但抉择的过程往往是痛苦的,往往让人不知所措。如果大家参照以下几点建议,相信会比较容易地做出正确的抉择。
- 如果需要转换的数据,通常做法在转换的时候做格式的校验,在Action中的校验方法中校验取值。假如用户填错了格式,我们可以通过在资源文件配置invalid.fieldvalue.xxx(xxx为属性名)来提示用户正确的格式,不同的阶段出错显示不同的信息。具体做法请参考上面的例子;
- 至于用validate()还是validateXxx(),我推荐使用validate()。原因是validateXxx()使用了反射,相对来说性能稍差,而validate()则是通过接口com.opensymphony.xwork2.Validateable调用。当然如果你的表单数据取值是取决于特定Action方法,则应该使用validateXxx()。
在运行上面的例子时,在Locale中输入zh并提交时出现图2所示页面。
图2 错误格式
在Locale中输入de_DE时,出现如图3所示页面。
图3 取值错误
使用Struts 2.0的校验框架
上一节的内容都是关于如何编程实现校验,这部分工作大都是单调的重复。更多情况下,我们使用Struts 2.0的校验框架,通过配置实现一些常见的校验。
我学习编程有个习惯——喜欢先看输出结果,再看代码实现。这样学的好处是先看结果可以刺激学习的激情,也可以在看代码前自已思考一下如何实现,然后带着问题去看代码,那就清晰多了。因此下面我们先来做演示。
首先,在tutorial包下新建ValidationAction.java,代码如下:
import com.opensymphony.xwork2.ActionSupport;
public class ValidationAction extends ActionSupport {
private String reqiuredString;
public String getReqiuredString() {
return reqiuredString;
}
public void setReqiuredString(String reqiuredString) {
this .reqiuredString = reqiuredString;
}
@Override
public String execute() {
return SUCCESS;
}
}
然后,配置上述所建的Ation,代码片段如下:
< result > /Output.jsp </ result >
< result name ="input" > /Input.jsp </ result >
</ action >
接着,创建Input.jsp和Output.jsp,内容分别如下:
<% @taglib prefix = " s " uri = " /struts-tags " %>
< html >
< head >
< title > Hello World </ title >
<!-- 此标志的作用是引入Struts 2.0的常用的Javascript和CSS -->
< s:head />
</ head >
< body >
< s:form action ="ValidationAction" >
< s:textfield name ="reqiuredString" label ="Required String" />
< s:submit />
</ s:form >
</ body >
</ html >
<% @taglib prefix = " s " uri = " /struts-tags " %>
< html >
< head >
< title > Hello World </ title >
</ head >
< body >
Required String: < s:property value ="reqiuredString" />
</ body >
</ html >
再接下来,在tutorial包下创建ValidationAction的校验配置文件Xxx-validation.xml(Xxx为Action的类名),在本例中该文件名ValidationAction-validation.xml,内容如下:
<! DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd" >
< validators >
< field name ="reqiuredString" >
< field-validator type ="requiredstring" >
< message > This string is required </ message >
</ field-validator >
</ field >
</ validators >
发布运行应用程序,在地址栏中键入http://localhost:8080/Struts2_Validation/Input.jsp,出现如图4所示页面。
图4 Input.jsp
直接点击“Submit”提交表单,出现图5所示的页面。
发表评论
-
详解struts2中struts.properties
2007-10-25 00:17 2726Stru ... -
struts2的struts.properties配置文件详解
2007-10-24 23:55 2200struts.action.extension ... -
Struts 2 间接实现零配置
2007-10-19 11:41 1778所谓间接实现零配置,是指只要做些初始化的配置之后,在以后的开发 ... -
Parameters in configuration results
2007-10-10 17:12 1222Parameters in configura ... -
How do we upload files
2007-10-10 16:47 1493xml 代码 How do we upload ... -
display dynamic or static images
2007-10-10 16:38 1637How can we display dynamic or s ... -
Struts2 验证器
2007-10-08 22:30 4371<validators> ... -
初涉Struts 2.0
2007-10-06 09:43 1201初涉Struts 2.0... -
Apache Struts 2 Plugin Registry
2007-10-03 17:25 2155Apache Struts 2 Plugin Registry ... -
Struts 2 官方
2007-10-03 17:22 11417Struts 2 官方: http://struts.apac ... -
struts2与spring2集成
2007-10-03 17:12 1248在Eclipse下建立一个Dynamic Web Applic ... -
struts2的struts.properties配置文件详解
2007-10-03 17:02 1174struts.action.extension ... -
Struts 2与AJAX(第三部分)
2007-10-03 16:53 1511Struts 2与AJAX(第三部分 ... -
Struts 2与AJAX(第二部分)
2007-10-03 16:52 1652在上一篇文章《Struts 2与AJAX(第一部分)》,我已经 ... -
Struts 2与AJAX(第一部分)
2007-10-03 16:51 1671Struts 2与AJAX(第一部分) 在当今——Web 2 ... -
struts2表单标签
2007-10-03 16:48 1635Form Tags ... -
Struts2 with logon
2007-10-03 16:45 1167关于此工程中的所有设置是承接前一篇文章Struts2介绍之使用 ... -
Struts2介绍之使用链接标签
2007-10-03 16:42 1872Web应用区别于普通的站点之处在于Web应用可以创建一个动态的 ... -
Strus 2的新表单标志的使用
2007-10-03 16:35 1170Struts 2为大家提供了不少常用的很酷的表单标志,简化了我 ... -
在Struts 2中实现文件上传
2007-10-03 16:33 1242实现原理 Struts 2是通过Commons FileUpl ...
相关推荐
### 在Struts 2.0中实现表单数据校验 #### 一、引言 在Web应用开发中,确保用户提交的数据有效性和安全性是非常重要的一步。Struts 2.0框架提供了强大的功能来帮助开发者处理这些任务。本文将详细介绍如何在Struts...
06 在Struts 2.0中实现表单数据校验(Validation) 07 Struts 2的基石——拦截器(Interceptor) 08 在Struts 2中实现IoC 09 在Struts 2中实现文件上传 10 在Struts 2中实现CRUD 11 Struts 2中的OGNL 12 trus 2的新...
在Struts 2.0中实现表单数据校验(Validation) Struts 2的基石——拦截器(Interceptor) 在Struts 2中实现IoC 在Struts 2中实现文件上传 在Struts 2中实现CRUD Struts 2中的OGNL Strus 2的新表单标志的使用 ...
06 在Struts 2.0中实现表单数据校验(Validation) 07 Struts 2的基石——拦截器(Interceptor) 08 在Struts 2中实现IoC 09 在Struts 2中实现文件上传 10 在Struts 2中实现CRUD 11 Struts 2中的OGNL 12 trus 2的新...
06 在Struts 2.0中实现表单数据校验(Validation) 07 Struts 2的基石——拦截器(Interceptor) 08 在Struts 2中实现IoC 09 在Struts 2中实现文件上传 10 在Struts 2中实现CRUD 11 Struts 2中的OGNL 12 Struts 2的...
1.为Struts 2.0做好准备 2.常用的Struts 2.0的标志(Tag)介绍 3.Struts 2.0的Action讲解 ...5.转换器(Converter)——Struts 2.0中的魔术师 在6.Struts 2.0中实现表单数据校验(Validation) 7....... 8.......
·Struts 2.0中实现表单数据校验(Validation) ·拦截器(Interceptor) ·Struts 2中实现IoC ·Struts 2中实现文件上传 ·Struts 2中的OGNL ·Strus 2的新表单标签的使用 ·Struts 2与AJAX ·Struts2分页 ...
Struts2.0是Java Web开发中一个非常重要的框架,它是Apache...在实际项目中,熟练运用Struts2.0能提高开发效率,降低维护成本。同时,了解并熟悉相关的社区资源和最佳实践,对于提升个人技能和适应团队协作至关重要。
5. **表单数据校验(Validation)**:Struts2内置了强大的验证机制,支持字段级和整体验证,可以使用注解或XML配置文件定义验证规则。在提交表单时,框架会自动执行校验逻辑,提供友好的错误提示。 6. **国际化...
拦截器是Struts2的一个强大特性,它们可以实现通用的功能,如日志记录、权限检查、数据校验等,并且可以按照特定顺序进行组合。例如,`params`拦截器用于填充Action的属性,`validation`拦截器则处理表单验证。 在...
Struts2集成Spring的Validation框架,允许开发者在Action类的属性上使用JSR303/JSR349(Bean Validation)注解进行数据校验。例如,`@NotNull`用于检查非空,`@Size(min=, max=)`限制字符串长度,`@Min`和`@Max`...
在这个"struts2.0 简单登录"的应用程序中,我们将探讨如何利用Struts2的核心概念和组件来创建一个基本的用户登录系统。 首先,让我们理解Struts2的基础。Struts2是Apache软件基金会的一个项目,它合并了Struts1和...
通过研究这些代码,你可以更深入地了解Struts2的数据校验和国际化是如何工作的,以及如何在自己的项目中实现它们。 总的来说,这个压缩包提供了一个全面的学习资源,涵盖了Struts2框架中的关键功能:数据校验、前端...
这篇博客“Struts2 part6:数据校验”可能详细介绍了如何在Struts2中实现对用户提交的数据进行验证。 Struts2的数据校验分为两个主要部分:客户端校验和服务器端校验。客户端校验通常使用JavaScript或者HTML5的表单...
在“Struts2_1100_SimpleDataValiation”这个压缩包中,可能包含了相关的代码示例、教程文档,或者是一个简单的Struts2项目,用于演示如何在实际应用中实现数据校验。你可以通过解压文件,学习和理解Struts2数据校验...
在“Struts2数据校验与国际化”这一主题中,我们将深入探讨Struts2如何通过不同的验证机制确保数据的有效性,以及如何通过国际化功能提供多种语言的用户体验。 首先,数据校验是任何Web应用程序中的关键环节,它...
在Struts2中,校验器(Validator)是处理用户输入验证的核心组件,确保提交到服务器的数据符合预设的业务规则。这篇博客文章可能是关于如何使用Struts2的内置校验机制以及自定义校验规则的探讨。 Struts2的校验框架...