乐者为王

Do one thing, and do it well.

使用Struts 2 Validation框架校验登录

Struts 2有三种校验方式:

  1. 使用Annotation进行校验。
  2. 使用XML配置校验。
  3. 使用覆盖validate方法校验。

使用XML配置时validation.xml的命名规则和放置路径:

1
<ActionClassName>-validation.xml

<ActionClassName>就是要验证的Action类的名字,将此文件放在与Action类文件相同的目录下即可。如果该Action类在struts.xml配置中有多个action实例,那么对应某个action实例的校验文件命名规则如下:

1
<ActionClassName>-<aliasName>-validation.xml

例如:UserAction-login-validation.xml。注意,这里的<aliasName>并不是方法名,而是struts.xml中配置的action实例的名字。

既然用框架来校验了,那么在LoginAction.java中判断用户名和密码是否为空的代码就可以删除了。还要记得加上username和passowrd的getter方法,不然校验器(validator)会因为取不到field而报错。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public String execute() throws Exception {
    User u = userService.getUser(username);
    if (u == null || !password.equals(u.getPassword())) {
        return INPUT;
    }

    ActionContext.getContext().getSession().put("logined", true);
    return SUCCESS;
}

public String getUsername() {
    return username;
}

public String getPassword() {
    return password;
}

同时在LoginAction.java相同目录下创建LoginAction-validation.xml,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<!DOCTYPE validators PUBLIC
    "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
    "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">

<validators>
    <field name="username">
        <field-validator type="requiredstring">
            <message>Username is required</message>
        </field-validator>
    </field>
    <field name="password">
        <field-validator type="requiredstring">
            <message>Password is required</message>
        </field-validator>
    </field>
</validators>

message提供了校验出错的信息,在其中可以使用${}来引用被校验的对象。如果未出现异常,则转入用户请求的处理方法;出现异常则转入input所指定的视图。所以,对于校验的action实例,必须要在配置文件中为其指定input视图。

代码下载:https://github.com/dohkoos/JBookShelf

Comments