`
peonyzzdx
  • 浏览: 590614 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

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

    博客分类:
  • J2EE
 
阅读更多

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]
  
  • 大小: 36.5 KB
分享到:
评论

相关推荐

    struts1和struts2区别

    - **Struts2**:支持validate方法和XWork验证框架,能够链式校验子属性,提供了更强大的验证规则定义和管理。 10. **Action执行的控制**: - **Struts1**:每个模块共享相同的Request Processor,Action生命周期...

    struts2 校验框架

    在Struts2中,校验框架是处理用户输入验证的重要组成部分,确保提交的数据符合业务规则和安全要求。这篇博客文章(虽然链接不可用)可能探讨了如何使用Struts2的内置校验机制来增强应用的安全性和用户体验。 Struts...

    Struts2中的validation_多国语言版 国际化i18n+struts2数据校验.zip

    Struts2提供了一种灵活的机制来验证用户输入,通过在Action类中定义校验规则或使用XML配置文件。当用户提交表单时,框架会自动执行这些校验规则,并在验证失败时返回错误信息。这种校验可以在前端(浏览器)或后端...

    Struts编程之struts校验源代码

    本资源“Struts编程之struts校验源代码”提供了一个完整的示例,帮助开发者深入理解Struts框架中的数据验证机制。 在Struts框架中,数据验证是非常重要的一环,它确保了用户输入的数据符合预设的规则,防止了无效或...

    struts2 基本校验(配置文件形式)

    在Struts2中,数据校验可以采用编程式校验和声明式校验两种方式。声明式校验更易于维护,因为它将校验逻辑与业务逻辑分离,通过配置文件来定义校验规则。配置文件通常为XML格式,位于`struts.xml`或`struts-plugin....

    Struts2讲义-作者:吴峻申

    - `ActionSupport`是Struts2提供的一个基类,包含了常用的验证方法。 - 继承`ActionSupport`类可以使Action自动获得验证功能。 - 通过重写`validate()`方法来自定义验证逻辑。 #### 五、Struts2的拦截器技术 - ...

    Java实训教程 Java软件开发实战 Java开发框架介绍 struts2_7_数据验证 共56页.pptx

    除了基本的手动编程和框架内置验证外,Struts2还支持更高级的数据验证用法,如自定义校验器和visitor校验器的应用方法等。 1. **自定义校验器**: - 可以通过扩展Struts2提供的校验器类来自定义验证规则。 - 适用...

    struts2-处理类型转换

    1. **编程式校验**:Action类需要实现`Validateable`接口,这会使得Struts2在执行`execute`方法前调用`validate`方法。在`validate`方法中,可以添加针对每个字段的校验逻辑,如果发现错误,通过`addActionError`或`...

    struts2实例

    Struts2提供了一种灵活的验证方式,可以基于Action类或者XML配置文件进行表单数据的校验。通过编写ValidatorForm或使用注解`@Validated`,开发者能够定义验证规则并处理错误信息。 2. **struts2_objectBean**:在...

    struts2的一些配置

    首先,`validate`是Struts2中的一个关键特性,用于处理表单验证。在Action类中,你可以定义一个或多个validate()方法,这些方法会在用户提交表单时被调用,检查输入数据的有效性。例如,你可以验证必填字段、数据...

    struts2_validation

    Struts2提供了一些基于XWork Validation Framework的内建验证程序,它们大大简化了输入验证工作。 使用这些验证程序不需要编程,程序员只需要在一个XML文件里对验证程序应该如何工作做出声明就行了。需要声明的内容...

    19对Action中所有方法进行输入校验.zip

    5. **编程式验证**:在每个Action类的方法内部,手动进行输入校验,虽然这种方式灵活性高,但容易导致代码重复,不推荐在大型项目中使用。 在进行输入校验时,应考虑以下几点: - **全面性**:确保对所有可能接收...

    Struts1和Struts2

    此外,Struts2还提供了丰富的数据验证机制,不仅支持在`Action`类中重写`validate()`方法进行验证,还支持使用注解和XML配置文件进行验证。更为重要的是,Struts2支持AJAX校验,这极大地改善了用户体验。 #### 五、...

    struts2拦截器实现拦截不文明字迹

    验证(validate)是Struts2中的另一个重要概念,通常用于数据校验。在Action类中,我们可以定义`validate`方法来检查用户输入的有效性。但要注意,拦截器和验证是两个不同的机制,拦截器可以在更广泛的层面上处理...

    struts2中拦截器的使用

    拦截器是Struts2框架的核心组件之一,它们在Action调用前后执行,提供了诸如日志记录、权限验证、数据校验等额外功能,极大地提高了代码的可复用性和可维护性。 在Struts2中,拦截器的使用主要基于两个方面:配置...

    struts1.3.8文档

    11. **Validator框架**:Struts1的Validator框架用于校验用户输入,它可以自定义验证规则,提高数据的准确性。 12. **ActionForward**:用于定义请求完成后转向的页面或者Action,是请求跳转的关键。 13. **Plug-...

Global site tag (gtag.js) - Google Analytics