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" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<s:form namespace="/validation" action="login">
    <s:textfield name="username" label="账号"></s:textfield>
    <s:password name="password" label="密码"></s:password>
    <s:submit value="登陆" ></s:submit>
</s:form>

<hr>
</body>
</html>

<struts>
    <package name="vaPkg" extends="struts-default" namespace="/validation">
        <action name="login" class="com.mxl.validation.LoginAction">
            <result name="input">/views/validation/login.jsp</result>
        </action>
    </package>
</struts>

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

问题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<String,List<String>> fieldErrors)
workflow:判断 fieldErrors集合有错误信息,决定了应该跳转到哪一个结果视图
问题4.开发中在一个Action中,校验的方法是少数,大多数方法都不需要校验.
难道大多数方法都要使用@SkipValidation标签吗?

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

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

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

theme="simple"
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值