Struts2之validate数据校验两种方式,SSH框架之Struts的验证总结、验证的错误处理

点击打开链接https://blog.csdn.net/woaigaolaoshi/article/details/50961505

点击打开链接https://blog.csdn.net/qq_34944851/article/details/54884935

1.Action中的validate()方法

Struts2提供了一个Validateable接口,这个接口中只存在validate()方法,实现这个接口的类可直接被Struts2调用,ActionSupport类就实现了Vadidateable接口,但他的validate()方法是一个空方法,需要我们来重写。

validate()方法会在execute()方法执行前执行,仅当数据校验正确,才执行execute()方法, 如错误则将错误添加到fieldErrors域中,如果定义的Action中存在多个逻辑处理方法,且不同的处理逻辑需要不同的校验规则,这种情况下validate()会对所有处理逻辑使用相同的校验规则,为了实现不同的校验逻辑,需要通过validateX()方法,其中X表示处理逻辑的方法名。

Action类:

public class LoginAction extends ActionSupport{
    private static final long serialVersionUID = 1L;

    private String userName;
    private String userPassword;


    public String execute(){

        System.out.println("execute");
        return SUCCESS;
    }

    public String login(){
        System.out.println("login");
        return SUCCESS;
    }

    public void validate(){
        System.out.println("validata");
    }

    public void validateLogin(){
        System.out.println("validatelogin");
        if(!(userName.equals("sbw") && userPassword.equals("123"))){
            addFieldError("error","wrong info");
        }
    }
    public String getUserName() {
        return userName;
    }


    public void setUserName(String userName) {
        this.userName = userName;
    }


    public String getUserPassword() {
        return userPassword;
    }


    public void setUserPassword(String userPassword) {
        this.userPassword = userPassword;
    }


}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49

struts.xml

<package name="main" extends="struts-default">
        <global-results>
            <result name="login">/login.jsp</result>
        </global-results>

        <action name="loginPerson" class="com.sbw.test.action.LoginAction" method="login">
            <result name="success">/success.jsp</result>
            <result name="input">/validateLogin.jsp</result>
        </action>
    </package>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

success.jsp

<body>
    登录成功 <s:property value="account"/>
  </body>
  • 1
  • 2
  • 3

validateLogin.jsp

 <body>
    <s:fielderror/>
  </body>
  • 1
  • 2
  • 3

运行结果(第一次测试正确,第二次测试错误)

这里写图片描述 
这里写图片描述

这里写图片描述 
这里写图片描述

2.通过XWork校验框架

使用validate方法校验时,如果Web应用中存在大量Action就需要多次重写validate方法,因此可以使用XWork的validator框架来对Struts2进行数据校验,减少代码量。

在com.action包下创建验证文件LoginAction-validation.xml,注:当一个Action中有多个业务处理方法是,命名规则为:actionName-methodName-validation.xml,其中actionName为Action类名,methodName为Action中某个业务处理方法的方法名,并且文件的搜索顺序与方式一种validate()和validateX()一样。

Login-validation.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
        "-//Apache Struts//XWork Validator 1.0.2//EN"
        "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">
<validators>
    <field name="userName">
        <field-validator type="requiredstring">
            <message>the name should not null</message>
        </field-validator>
    </field>

    <field name="userPassword">
        <field-validator type="requiredstring">
            <message>the password should not null</message>
        </field-validator>
    </field>
</validators>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

再次运行结果为: 
这里写图片描述

上述字段校验方式为字段校验方式,还有一种方式是非字段校验方式,如下: 
Login-validation.xml:

<validators>
    <validator type="requiredstring">
        <param name="fieldName">userName</param>
        <message>name should not null</message>
    </validator>

    <validator type="requiredstring">
        <param name="fieldName">userPassword</param>
        <message>password should not null</message>
    </validator>
</validators>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

结果与字段校验方式一样

附:Struts2常用校验器:

这里写图片描述

一、验证总结 
1、形式差别 
代码: 
1)重写validate(),验证action所有方法 
2)validate方法名(),验证指定“方法名”的方法

Xml: 
1)验证所有方法: ActionClassName-validation.xml 
2)验证指定方法: ActionClassName-actionName-validation.xml

2、功能及作用差别 
1)代码验证: 
比较灵活,可以满足所有的需求。 
比较繁琐,要写重复的验证判断逻辑! 
适合: 表单字段较少的情况用!

2)XML验证: 
通用,但不够灵活。 
可以验证特定简单的业务。 
适合: 验证表单字段较多,可以大大简化代码!(但配置文件过多)

二、验证的错误处理 
Struts在进行数据效验的时候,验证失败,会返回input视图,要求我们要在struts.xml中配置input视图对应的错误页面!

1、配置:Struts.xml

<!-- 注册失败跳转到注册页面,显示失败信息 -->
<global-results>
    <result name="input">/register.jsp</result>
</global-results>
  • 1
  • 2
  • 3
  • 4

2、Jsp显示错误 
方式1:显示所有错误

<%@taglib uri="/struts-tags" prefix="s" %>
<!-- 显示的是struts在运行时期产生的所有错误 -->
<s:fielderror></s:fielderror>
  • 1
  • 2
  • 3

方式2:显示指定的错误

<!-- 修改struts标签默认的样式: 不让换行 --> 
<style type="text/css">
    ul{
        display: inline;
    }
    ul li{
        display: inline;
        color: red;
    }
</style>
<!-- 显示指定的错误 -->
<s:fielderror fieldName="user.userName"></s:fielderror>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

方式3:修改标签定义的模板(了解即可) 
1)找到fielderror标签定义的模板文件: 
Struts-core.jar\template\simple\ fielderror.ftl 
2)把修改后的fielderror.ftl文件,放到src/ template/ simple/ fielderror.ftl,这样标签显示的样式就修改了!

3、案例展示: 
1)register.jsp、UserAction-validation.xml 

2)struts.xml配置 
 
3)效果 
未填写: 
 
填写完成,点击注册后: 


猜你喜欢

转载自blog.csdn.net/sinat_23619409/article/details/80256850