struts2-登陆校验

输入校验:(对用户输入的数据,判断用户输入的数据是否合法,一般会使用正则表达式)
一.客户端校验: 过滤正常用户的误操作,通过JS代码完成(可以绕开).
二.服务端校验: 整个应用阻止非法数据的最后防线(必须),使用Java代码.
三.数据库校验:在保存数据进数据库时候,对数据的合法性做校验

Struts2校验方式:
1.代码方式校验:开发中常用;
2.配置校验:
2.1.基于XML配置校验(推荐使用)。
2.2.基于Annotation配置校验。

Action中
* 要继承ActionSupport
* 重写Validateable接口中的validate()方法 ,在该方法中完成验证
* 步骤如下:
* validate()方法在其他的业务方法之前执行
* 验证出错转向的页面
struts.xml配置/validate/login.jsp
其中input转向是在action中已经定义好的.
public static final String INPUT = “input”;
* 什么时候表示验证出错(转向input所指向的页面)
* super.addFieldError(“字段名称”, “错误信息”);
* 当集合不为空时,转向错误页面.
* 若校验失败,不会再执行Action中的业务方法.

需求:对登陆操作进行校验
账号:必须在6-16个字符之间
密码:必须在6-16个字符之间

//输入校验
public class LoginAction extends ActionSupport {

    private String username;
    private String password;

    public void setUsername(String username) {
        this.username = username;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    /**
     * 覆盖父类方法
     * 账号密码不少于6位
     */
    public void validate() {
        if (username == null || !username.matches("^[a-zA-Z]\\w{5,15}$")){
            //错误信息先存储
            super.addFieldError("username","账号第一个字必须为字母6~16位");
        }
        if (password == null || !password.matches("^[a-zA-Z]\\w{5,15}$")){
            //错误信息先存储
            super.addFieldError("password","密码第一个字必须为字母6~16位");
        }
    }

    @Override
    public String execute() throws Exception {

        System.out.println(username+","+password);
        return NONE;
    }
}

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="s" uri="/struts-tags" %>


    Title



    
    
    




    
        
            /views/validation/login.jsp
        
    

-----------------分隔符------------------------

问题1:为什么在执行input方法之前,没有执行validate方法.
问题2:Action中某些方法不需要校验,却也执行了validate方法,如何避免问题.
问题3.为什么校验失败,默认跳转到input结果视图.
问题4.开发中在一个Action中,校验的方法是少数,大多数方法都不需要校验.
问题5:从workflow的拦截可以看出,校验失败会跳到默认的结果视图(“input”).
问题6.错误信息提示丑陋.

===============================================
问题1:为什么在执行input方法之前,没有执行validate方法.
在validation和workflow拦截中,设置了不被校验的默认方法.
input,back,cancel,browse

问题2:Action中某些方法不需要校验,却也执行了validate方法,如何避免问题.
可以为不需要校验的方法上,使用@SkipValidation(跳过验证).

问题3.为什么校验失败,默认跳转到input结果视图.
validation:判断该方法执行之前是否需要校验,如果需要,把校验的错误信息存储起来(Map> fieldErrors)
workflow:判断 fieldErrors集合有错误信息,决定了应该跳转到哪一个结果视图
问题4.开发中在一个Action中,校验的方法是少数,大多数方法都不需要校验.
难道大多数方法都要使用@SkipValidation标签吗?

 针对于指定的Action方法编写校验方法
  编写validateXxx方法,---针对于-->xxx方法的校验.
  比如:对save方法提供校验:-->validateSave();

问题5:从workflow的拦截可以看出,校验失败会跳到默认的结果视图(“input”).
问题:是否可以修改默认的结果视图?----?校验失败跳到"edit"视图
@InputConfig(resultName=“edit”)
被校验的方法

问题6.错误信息提示丑陋.

theme="simple"

你可能感兴趣的:(struts2框架)