首页 > 编程语言 > 详细

JavaWeb学习:Struts2数据校验

时间:2020-12-03 15:12:07      阅读:26      评论:0      收藏:0      [点我收藏+]

index.jsp

<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    
    <s:form action="user_login" namespace="/" method="post">
        <s:textfield name="name" label="姓名" />
        <s:textfield name="password" label="密码" />
        <s:submit name="submit" value="submit" />
    </s:form>
</body>
</html>

一、手动编码

  ①、Action(setxxx方法为了将画面值设置到对应的属性中

public class UserAction extends ActionSupport {
    // 接收页面数据
    private String name;
    private String password;

    public void setName(String name) {
    this.name = name;
    }

    public void setPassword(String password) {
    this.password = password;
    }
    
    /*=======================验证execute方法===============================*/
    @Override
    public String execute() throws Exception {

    System.out.println("执行login方法");
    return NONE;
    }
    
    @Override
    public void validate() {

    super.validate();
    }

    /*=======================验证指定方法===============================
     * 
     * 格式:validate + 方法名(方法名首字母大写)
     * 
     * */
    public String login() {
    System.out.println("执行login方法");
    return NONE;
    }

    public void validateLogin() {
    if (name == null || name.trim().length() == 0) {
        this.addFieldError("name", "姓名不能为空");
    }

    if (password == null || password.trim().length() == 0) {
        this.addFieldError("password", "密码不能为空");
    }
    }
}

  ②、struts.xml

    <package name="interceptorDemo" extends="struts-default" namespace="/">
        <global-allowed-methods>regex:.*</global-allowed-methods>
        <action name="user_*" class="com.xxx.web.action.UserAction" method="{1}">
            <result name="input">/demo1/index.jsp</result>
        </action>
    </package>

原理:为什么要使用this.addFieldError(String name, String message);

技术分享图片

二、XML配置

  Ⅰ、在Action所在包下,创建一个XML文件

    校验当前ActionClass中所有方法的格式:ActionClassName-validation.xml

      如:校验UserAction中所有方法

      技术分享图片   

    校验当前ActionClass中指定方法的格式:ActionClassName-ActionName-validation.xml,ActionName对应的是struts.xml文件对应的action标签的name属性的值

      如:校验UserAction中login方法

        <action name="user_*" class="com.xxx.web.action.UserAction" method="{1}">
            <result name="input">/demo1/index.jsp</result>
        </action>

      技术分享图片

   Ⅱ、引入DTD

    struts2-core-2.5.xx.jar包下有xwork-validator-1.0.3.dtd

  <!DOCTYPE validators PUBLIC
          "-//Apache Struts//XWork Validator 1.0.3//EN"
          "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">

  Ⅲ、进行配置

<validators>
    <field name="name">
        <field-validator type="requiredstring">
            <message>用户名不能为空</message>
        </field-validator>
    </field>
</validators>

requiredstring就是校验规则:

  技术分享图片

  Ⅳ、Action

public class UserAction extends ActionSupport {
    // 接收页面数据
    private String name;
    private String password;

    public void setName(String name) {
    this.name = name;
    }

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

    public String login() {
    System.out.println("执行login方法");
    return NONE;
    }
}

  运行校验结果:无论name中有没有值都通不过校验,原因是name无法获取到值,缺少get方法

  代码如下

public class UserAction extends ActionSupport {
    // 接收页面数据
    private String name;
    private String password;

    public void setName(String name) {
    this.name = name;
    }

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

    public String getName() {
        return name;
    }

    public String getPassword() {
        return password;
    }

    public String login() {
    System.out.println("执行login方法");
    return NONE;
    }
}

 

校验规则:

<validators>
    <field name="password">
        <field-validator type="stringlength">
            <param name="minLength">6</param>
            <param name="maxLength">12</param>
            <message>密码需要6-12位</message>
        </field-validator>
    </field>
    <!-- 校验确认密码 -->
    <field name="repassword">
        <field-validator type="fieldexpression">
            <!-- <![CDATA[(password==repassword)]]> xml将CDTAT中的内容识别为正常的XML数据内容 -->
            <param name="expression"><![CDATA[(password==repassword)]]></param>
            <message>两次密码不一致</message>
        </field-validator>
    </field>
    
    <!-- 校验年龄 -->
    <field name="age">
        <field-validator type="int">
            <param name="min">18</param>
            <param name="max">60</param>
            <message>年龄不合法!必须是18-60岁之间</message>
        </field-validator>
    </field>
    
    <!-- 校验邮箱 -->
    <field name="email">
        <field-validator type="email">
            <message>邮箱格式不正确</message>
        </field-validator>
    </field>
    
    <!-- 校验确认密码 -->
    <field name="phone">
        <field-validator type="regex">
            <!-- <![CDATA[******]]> xml将CDTAT中的内容识别为正常的XML数据内容 -->
            <param name="expression"><![CDATA[^13\d{9}$]]></param>
            <message>电话号码不正确</message>
        </field-validator>
    </field>
</validators>

 

JavaWeb学习:Struts2数据校验

原文:https://www.cnblogs.com/WarBlog/p/14074954.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!