struts2校验(一):编程式验证(validate()验证)

[size=medium]
struts2支持三种验证方式:
[color=red]编程式验证、声明式验证、注解式验证[/color]

[b]服务器端验证(输入校验、struts2自带的validate框架验证)[/b]
[color=red]

1.我们需要配置struts2项目的最基本的jar包。(validate验证框架是有"xwork-core"包提供的)
2.使用struts2自带的validate验证有两种方法[/color]

a):[b]编程式验证 [/b](也就是重写ActionSupport中的validate()方法) 在validate方法中进行编写我们需要的验证功能 这里需要提几点的就是:
1>.当我们需要对action中的某一个指定的方法使用validate()方法验证时我们需要自定义一个validate
2>.当我们使用自定义的validate方法时,最好将重写的ActionSupport的validate方法去掉 (这是为了避免
引起冲突,因为如果action类中存在重写的validate()方法 程序会自动调用我们自定义的validate方法 之
后再调用它 这样就验证了多次,非常不利于程序的效率。而且容易出现冲突)
3>.在创建自定义的validate方法时需要注意该方法的 方法名! 该方法名由 validate+对应的表单提交的
action中的 执行方法名称(首字母大写)(java代码中的方法名)

b):[b]声明式验证(使用xml文件进行配置验证功能)[/b](建议使用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)[b]编程式验证(即validate验证)[/b](使用编码方式实现)
校验流程:
1. 类型转换器负责对字符串的请求参数执行类型转换。并将这些值设置成Action的属性值。
2. 转换过程中若出现异常,则将异常信息保存到ActionContext中,conversionError拦截器将其封装到fieldError中。
3. 通过[color=red]反射[/color]调用validateXxx()方法,其中Xxx是即将处理用户请求的处理逻辑所对应的方法名。。
4. 调用validate(),在validate()方法中,如果系统发现有不合法输入时,调用其父类的addFieldError() 方法记录一个fieldError错误,当流程进入到execute()方法之前,系统检查有没有fieldError,如果有,则不再执行execute()方法,而是返回一个input逻辑视图通过<s:fielderror/>显示失败信息。


注意:[color=red]首先执行validateXxx()方法,不管validateXxx()方法执行后的结果如何,都会去执行validate()方法[/color]
执行完validate()之后,如果没有发现存在Field或者Action级别的ERROR的话
那么才会执行相应的业务逻辑的方法,如Xxx()方法
1 2 3 4
validateXxx() -> Xxx() -> validate() -> excute()
如果1有异常,则不再执行2,进入3,3有异常,则不再进入4.


程序示例:
先来在Web根目录建立一个主页面(validate.jsp),代码如下:
[color=red] <s:fielderror key="msgInfo" />[/color][/size]

<%@ 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>

[size=medium]
在上面的代码中,使用了Struts2的tag:<s:actionerror>、<s:fielderror>和<s:actionmessage>,分别用来显示动作错误信息,字段错误信息,和动作信息。如果信息为空,则不显示[/size]
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消息只要提供一个信息字符串就可以了。
}*/
}

[size=medium]大家从上面的代码可以看出,Field错误需要一个key(一般用来表示是哪一个属性出的错误),而Action错误和Action消息只要提供一个信息字符串就可以了。
最后来配置一下这个Action,代码如下:[/size]
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()讲解如下:

[img]http://dl2.iteye.com/upload/attachment/0085/0687/44481768-5ee4-3e81-90fb-5f02c87ae1ff.jpg[/img]

这两个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]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值