- 浏览: 590614 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
zhanghao1785:
jQuery jqGrid中ColModel的参数大全 -
haiyangyiba:
在实际应用中,回车提交一般需要注意的是,多次回车之间的间隔,换 ...
回车自动提交 -
fengkuangxiao6:
快捷键能写的这么详细,太棒了!
Eclipse中10个最有用的快捷键组合 -
Frank_Sun:
我的jdk版本是1.6.0.29,在finally中加retu ...
try catch finally与return的执行顺序 -
jueyue:
这个注解可以搞吗,感觉还不如放在前台
struts2校验(二):声明式验证(基于xml配置验证)(1)
struts2支持三种验证方式:
编程式验证、声明式验证、注解式验证
服务器端验证(输入校验、struts2自带的validate框架验证)
1.我们需要配置struts2项目的最基本的jar包。(validate验证框架是有"xwork-core"包提供的)
2.使用struts2自带的validate验证有两种方法
a):编程式验证 (也就是重写ActionSupport中的validate()方法) 在validate方法中进行编写我们需要的验证功能 这里需要提几点的就是:
1>.当我们需要对action中的某一个指定的方法使用validate()方法验证时我们需要自定义一个validate
2>.当我们使用自定义的validate方法时,最好将重写的ActionSupport的validate方法去掉 (这是为了避免
引起冲突,因为如果action类中存在重写的validate()方法 程序会自动调用我们自定义的validate方法 之
后再调用它 这样就验证了多次,非常不利于程序的效率。而且容易出现冲突)
3>.在创建自定义的validate方法时需要注意该方法的 方法名! 该方法名由 validate+对应的表单提交的
action中的 执行方法名称(首字母大写)(java代码中的方法名)
b):声明式验证(使用xml文件进行配置验证功能)(建议使用xml配置文件进行validate的验证)
: 1.需要使用到xwork-core包下的 xwork-validate.dtd(版本根据项目进行选择,不过大体相同)
: 2.关于使用Xml进行验证 的两种情况: 全局验证 和局部验证
a1):关于全局验证
全局就是针对整个action对象进行xml验证
当我们使用全局验证时候需要在 action对象的同目录下创建一个xml配置文件
文件名是由 : action对象的名称+(-validation.xml)
a2):关于局部验证
局部验证是针对action对象中的某一个方法进行xml验证
使用局部验证的时候同样要在 action对象的同目录下创建一个xml配置文件
不过使用局部验证需要在struts.xml 中进行配置
代码如下:(struts.xml)
1)编程式验证(即validate验证)(使用编码方式实现)
校验流程:
1. 类型转换器负责对字符串的请求参数执行类型转换。并将这些值设置成Action的属性值。
2. 转换过程中若出现异常,则将异常信息保存到ActionContext中,conversionError拦截器将其封装到fieldError中。
3. 通过反射调用validateXxx()方法,其中Xxx是即将处理用户请求的处理逻辑所对应的方法名。。
4. 调用validate(),在validate()方法中,如果系统发现有不合法输入时,调用其父类的addFieldError() 方法记录一个fieldError错误,当流程进入到execute()方法之前,系统检查有没有fieldError,如果有,则不再执行execute()方法,而是返回一个input逻辑视图通过<s:fielderror/>显示失败信息。
注意:首先执行validateXxx()方法,不管validateXxx()方法执行后的结果如何,都会去执行validate()方法
执行完validate()之后,如果没有发现存在Field或者Action级别的ERROR的话
那么才会执行相应的业务逻辑的方法,如Xxx()方法
1 2 3 4
validateXxx() -> Xxx() -> validate() -> excute()
如果1有异常,则不再执行2,进入3,3有异常,则不再进入4.
程序示例:
先来在Web根目录建立一个主页面(validate.jsp),代码如下:
<s:fielderror key="msgInfo" />
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%> <%@ taglib prefix="s" uri="/struts-tags" %> <html> <head> <title>验证数据</title> </head> <body> <s:actionerror/> <s:actionmessage/> <s:form action="validate.action" theme="simple"> 输入内容:<s:textfield name="msg"/> <s:fielderror key="msgInfo" /> <br/> <s:submit/> </s:form> </body> </html>
在上面的代码中,使用了Struts2的tag:<s:actionerror>、<s:fielderror>和<s:actionmessage>,分别用来显示动作错误信息,字段错误信息,和动作信息。如果信息为空,则不显示
ValidateAction .java
public class ValidateAction extends ActionSupport { private String msg; private String phone; //节约篇幅,这里省略set/get方法 public String execute() { return SUCCESS; } public void validate() { if(!msg.equalsIgnoreCase("hello")) { System.out.println(INPUT); this.addFieldError("msg.hello", "必须输入hello!");// 可以直接写addFieldError("msgInfo", "必须输入hello!") this.addActionError("处理动作失败!"); } else { this.addActionMessage("提交成功"); } if(phone==null||"".equals(phone)){ this.addFieldError("phoneMsg", "必须输入手机号!"); } else { this.addActionMessage("提交成功"); } / * 大家从上面的代码可以看出,Field错误需要一个key(一般用来表示是哪一个属性出的错误) 而Action错误和Action消息只要提供一个信息字符串就可以了。 }*/ }
大家从上面的代码可以看出,Field错误需要一个key(一般用来表示是哪一个属性出的错误),而Action错误和Action消息只要提供一个信息字符串就可以了。
最后来配置一下这个Action,代码如下:
struts.xml
<package name="demo" extends="struts-default"> <constant name="struts.ui.theme" value="simple" /> // 配置不要自动生成table元素,此处也可以在jsp中设置<s:form action="" validate="true"> <action name="validate" class="action.ValidateAction"> <result name="success">/error/validate.jsp</result> <result name="input">/error/validate.jsp</result>//使用验证框架则必须配置input </action> </package>
validateXxx()同上。
关于addFieldError()讲解如下:
这两个add方法和ActionErrors类中的add方法类似,只是add方法的错误信息需要一个ActionMessage对象,比较麻烦。除了加入错误信息外,还可以使用addActionMessage方法加入成功提交后的信息。当提交成功后,可以显示这些信息。
以上三个add方法都在ValidationAware接口中定义,并且在ActionSupport类中有一个默认的实现。其实,在ActionSupport类中的实现实际上是调用了ValidationAwareSupport中的相应的方法,也就是这三个add方法是在ValidationAwareSupport类中实现的,代码如下:
private final ValidationAwareSupport validationAware = new ValidationAwareSupport();
public void addActionError(String anErrorMessage)
{ validationAware.addActionError(anErrorMessage);
}
public void addActionMessage(String aMessage)
{
validationAware.addActionMessage(aMessage);
}
public void addFieldError(String fieldName, String errorMessage)
{
validationAware.addFieldError(fieldName, errorMessage
[/size]
发表评论
-
spring 国际化
2013-06-09 15:03 307一、在src根目录下创建applicationContext. ... -
memcached(转)
2013-06-03 17:42 1068准备工作 下载安装并启动memcached-win32-1. ... -
Spring的任务调度服务实例讲解(二)
2013-06-03 16:18 112job的配置: applicationContext-job ... -
Spring三种bean注入方式
2013-06-03 15:06 185Spring中依赖注入有三种注入方式: 一、构造器注入; 二、 ... -
struts2 国际化
2013-05-30 10:13 151目录: 1. 国际化分类 ... -
struts2标签不显示Label的解决方法
2013-05-29 17:16 1185struts2标签不显示Label的解决方法 最近发现st ... -
struts2 标签 :<s:date> <s:debug >用法
2013-05-29 14:35 1520一、<s:date name="pop ... -
Struts2类型转换器(二)
2013-05-28 16:23 126Struts2之自定义类型转换器 Struts2自定义类型转 ... -
struts2的类型转换(一)
2013-05-28 16:17 132web应用类型的转换分为 ... -
类型转换与输入校验的流程
2013-05-27 11:27 952类型转换与输入校验的 ... -
struts2校验(二):声明式验证(基于xml配置验证)(1)
2013-05-24 17:48 4340声明式验证示例程序 下面将给出一个例子来演示如何使用Strut ... -
struts2校验(二):声明式验证(基于xml配置验证)(2)
2013-05-24 15:58 2490Struts2校验框架的本质 展开xwork-2.0.4.ja ... -
struts2:struts.xml和struts.properties
2013-05-23 10:41 1141struts.xml文件主要负责管理应用中的Action映射, ... -
struts2 -- interceptor 拦截器
2013-05-22 13:57 1148一、理解Struts2拦截器 1. ... -
struts2 struts.xml使用通配符
2013-05-22 10:37 10475.4.1 使用通配符 前面学过,可以在定义<acti ... -
struts.xml配置详解
2013-05-22 09:35 1108struts.xml是我们在开发中利用率最高的文件,也是Str ... -
知识二(线程编程方面)
2013-05-09 16:04 1103[size=medium]1.实现线程的 ... -
struts2的json插件配置详解(附示例strutsJson)
2013-03-09 11:58 2405为了方便ajax调用传输数 ... -
Spring的scope="prototype"属性
2012-12-18 14:38 1493可以利用容器的scope="prototype&qu ... -
oracle如何取出查询结果中的某一条数据
2012-08-22 13:24 6664此为查询结果的最新的一条数据。 SELECT * FRO ...
相关推荐
- **Struts2**:支持validate方法和XWork验证框架,能够链式校验子属性,提供了更强大的验证规则定义和管理。 10. **Action执行的控制**: - **Struts1**:每个模块共享相同的Request Processor,Action生命周期...
在Struts2中,校验框架是处理用户输入验证的重要组成部分,确保提交的数据符合业务规则和安全要求。这篇博客文章(虽然链接不可用)可能探讨了如何使用Struts2的内置校验机制来增强应用的安全性和用户体验。 Struts...
Struts2提供了一种灵活的机制来验证用户输入,通过在Action类中定义校验规则或使用XML配置文件。当用户提交表单时,框架会自动执行这些校验规则,并在验证失败时返回错误信息。这种校验可以在前端(浏览器)或后端...
本资源“Struts编程之struts校验源代码”提供了一个完整的示例,帮助开发者深入理解Struts框架中的数据验证机制。 在Struts框架中,数据验证是非常重要的一环,它确保了用户输入的数据符合预设的规则,防止了无效或...
在Struts2中,数据校验可以采用编程式校验和声明式校验两种方式。声明式校验更易于维护,因为它将校验逻辑与业务逻辑分离,通过配置文件来定义校验规则。配置文件通常为XML格式,位于`struts.xml`或`struts-plugin....
- `ActionSupport`是Struts2提供的一个基类,包含了常用的验证方法。 - 继承`ActionSupport`类可以使Action自动获得验证功能。 - 通过重写`validate()`方法来自定义验证逻辑。 #### 五、Struts2的拦截器技术 - ...
除了基本的手动编程和框架内置验证外,Struts2还支持更高级的数据验证用法,如自定义校验器和visitor校验器的应用方法等。 1. **自定义校验器**: - 可以通过扩展Struts2提供的校验器类来自定义验证规则。 - 适用...
1. **编程式校验**:Action类需要实现`Validateable`接口,这会使得Struts2在执行`execute`方法前调用`validate`方法。在`validate`方法中,可以添加针对每个字段的校验逻辑,如果发现错误,通过`addActionError`或`...
Struts2提供了一种灵活的验证方式,可以基于Action类或者XML配置文件进行表单数据的校验。通过编写ValidatorForm或使用注解`@Validated`,开发者能够定义验证规则并处理错误信息。 2. **struts2_objectBean**:在...
首先,`validate`是Struts2中的一个关键特性,用于处理表单验证。在Action类中,你可以定义一个或多个validate()方法,这些方法会在用户提交表单时被调用,检查输入数据的有效性。例如,你可以验证必填字段、数据...
Struts2提供了一些基于XWork Validation Framework的内建验证程序,它们大大简化了输入验证工作。 使用这些验证程序不需要编程,程序员只需要在一个XML文件里对验证程序应该如何工作做出声明就行了。需要声明的内容...
5. **编程式验证**:在每个Action类的方法内部,手动进行输入校验,虽然这种方式灵活性高,但容易导致代码重复,不推荐在大型项目中使用。 在进行输入校验时,应考虑以下几点: - **全面性**:确保对所有可能接收...
此外,Struts2还提供了丰富的数据验证机制,不仅支持在`Action`类中重写`validate()`方法进行验证,还支持使用注解和XML配置文件进行验证。更为重要的是,Struts2支持AJAX校验,这极大地改善了用户体验。 #### 五、...
验证(validate)是Struts2中的另一个重要概念,通常用于数据校验。在Action类中,我们可以定义`validate`方法来检查用户输入的有效性。但要注意,拦截器和验证是两个不同的机制,拦截器可以在更广泛的层面上处理...
拦截器是Struts2框架的核心组件之一,它们在Action调用前后执行,提供了诸如日志记录、权限验证、数据校验等额外功能,极大地提高了代码的可复用性和可维护性。 在Struts2中,拦截器的使用主要基于两个方面:配置...
11. **Validator框架**:Struts1的Validator框架用于校验用户输入,它可以自定义验证规则,提高数据的准确性。 12. **ActionForward**:用于定义请求完成后转向的页面或者Action,是请求跳转的关键。 13. **Plug-...