zoukankan      html  css  js  c++  java
  • Struts2 数据校验之四兄弟

    现在是科技的时代,大多数人都在网上购物了, 我们都碰到过相同的问题,各大网站弄的那些各种各样的注册页面,相信大家都深有体会。

    有了这验证就很好的保证了我们的信息的准确性和安全性。

    接下来我给大家讲解一下用struts2怎么实现页面上简单的拦截。

    方法一:

    用execute()方法来实现

    1.0创建一个UserInfo类

    package cn.struts.entity;
    
    /**
     * Created by accp on 2017/3/6.
     */
    public class UserInfo {
        //用户名
        private String name;
        //密码
        private String pwd;
        //电话
        private String phone;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getPwd() {
            return pwd;
        }
    
        public void setPwd(String pwd) {
            this.pwd = pwd;
        }
    
        public String getPhone() {
            return phone;
        }
    
        public void setPhone(String phone) {
            this.phone = phone;
        }
    }

    2.0创建一个ExecuteAction继承ActionSupport

    package cn.struts.action;
    
    import cn.struts.entity.UserInfo;
    import com.opensymphony.xwork2.ActionSupport;
    
    /**
     * Created by accp on 2017/3/6.
     */
    public class ExecuteAction extends ActionSupport {
    
        //用户对象
        private UserInfo user;
        //确认密码
        private String okpwd;
    
        @Override
        public String execute() throws Exception {
            //判断用户名是否为空
            if (user.getName().length() == 0) {
                addFieldError("name", "用户名不能为空");
            }
            //判断密码是否为空
            if (user.getPwd().length() == 0) {
                addFieldError("pwd", "密码不能为空");
            }
            //判断电号码是否为空
            if (user.getPhone().length() == 0) {
                addFieldError("phone", "电话不能为空");
            }
            //判断两次输入的密码是否一致
            if(!user.getPwd().equals(okpwd)){
                addFieldError("userpwd", "两次密码不一致");
            }
            //这是最重要的判断
            //判断上面是否还存在没有通过的验证
            if (this.hasFieldErrors()) {
                return "input";
            }
            return "success";
        }
    
        public UserInfo getUser() {
            return user;
        }
    
        public void setUser(UserInfo user) {
            this.user = user;
        }
    
        public String getOkpwd() {
            return okpwd;
        }
    
        public void setOkpwd(String okpwd) {
            this.okpwd = okpwd;
        }
    }

    3.0编写struts.xml

      <action name="executeAction" class="cn.struts.action.ExecuteAction">
                <result>/success.jsp</result>
                <result name="input">/index.jsp</result>
     </action>

    4.0编写页面

    index.jsp:

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <%@taglib prefix="s" uri="/struts-tags" %>
    <html>
    <title>登陆页面</title>
    <body>
    <s:fielderror></s:fielderror>
    <form action="execute" method="post">
        用户名:<input name="user.name"><br/>
        电话:<input name="user.phone"><br/>
        密码:<input name="user.pwd"><br/>
        确认密码:<input name="okpwd"><br/>
        <input type="submit" value="提交">
    </form>
    </body>
    </html>

    success.jsp:

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <%@taglib prefix="s" uri="/struts-tags" %>
    <html>
    <head>
        <title>成功页面</title>
    </head>
    <body>
    欢迎你:<s:property value="user.name"></s:property></body>
    </html>

    效果如下:

    这些就是我们注册时常常碰到的提示!!!!

    方法二:

    用validate方法来进行验证

    创建实体类我们在这里就省略了,直接创建ValidateAction

    1.0ValidateAction继承ActionSupport ,重写了validate()方法

    package cn.struts.action;
    
    import cn.struts.entity.UserInfo;
    import com.opensymphony.xwork2.ActionSupport;
    
    /**
     * Created by accp on 2017/3/6.
     */
    public class ValidateAction extends ActionSupport {
        private UserInfo user;
        private String okpwd;
        @Override
        public void validate() {
            //判断用户名是否为空
            if(user.getName().length()==0){
                addFieldError("name","用户名不能为空");
            }
            //判断密码是否为空
            if(user.getPwd().length()==0){
                addFieldError("pwd","密码不能为空");
            }
            //判断电话是否为空
            if(user.getPhone().length()==0){
                addFieldError("phone","电话不能为空");
            }
            //判断两次密码输入是否一致
            if(!user.getPwd().equals(okpwd)){
                addFieldError("userpwd", "两次密码不一致");
            }
        }
    
        public UserInfo getUser() {
            return user;
        }
    
        public void setUser(UserInfo user) {
            this.user = user;
        }
    
        public String getOkpwd() {
            return okpwd;
        }
    
        public void setOkpwd(String okpwd) {
            this.okpwd = okpwd;
        }
    }

    2.0struts.xml:

      <!--validate验证-->
            <action name="validate" class="cn.struts.action.ValidateAction">
                <result>/success.jsp</result>
                <result name="input">/index.jsp</result>
            </action>

    我们只需要更改表单提交的名称即可。

    3.0index.jsp:

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <%@taglib prefix="s" uri="/struts-tags" %>
    <html>
    <title>登陆页面</title>
    <body>
    <s:fielderror></s:fielderror>
    <form action="validate" method="post">
        用户名:<input name="user.name"><br/>
        电话:<input name="user.phone"><br/>
        密码:<input name="user.pwd"><br/>
        确认密码:<input name="okpwd"><br/>
        <input type="submit" value="提交">
    </form>
    </body>
    </html>

    得到的效果跟上述方法一相同。

    写到这里同学们有没有疑问?怎么没有验证长度,不可能我们注册或者登录时没有别的条件限制?

    能想到这的都是经常上网站购物的..............

    接下来我们讲解第三种方法

    方法三:

    上面我们也提到了可能有别的验证,比如说长度,格式等等之类的。在这里我们定义一个方法来实现。

    1.0创建ValidateXxxAction继承ActionASupport

    package cn.struts.action;
    
    import cn.struts.entity.UserInfo;
    import com.opensymphony.xwork2.ActionSupport;
    
    /**
     * Created by accp on 2017/3/6.
     */
    public class ValidateXxxAction  extends ActionSupport{
    
        private UserInfo user;
        private String okpwd;
        //定义方法来做验证
        public void validateRegist(){
            //用户名的长度
            if(user.getName().length()<6){
                addFieldError("name","用户名长度不能小于6位");
            }
        }
       //这里一定要注意:这个方法名称与上面自己定义的方法的后半部分相同
        public String regist(){
            return SUCCESS;
        }
        @Override
        public void validate() {
            //判断用户名是否为空
            if(user.getName().length()==0){
                addFieldError("name","用户名不能为空");
            }
            //判断密码是否为空
            if(user.getPwd().length()==0){
                addFieldError("pwd","密码不能为空");
            }
            //判断电话是否为空
            if(user.getPhone().length()==0){
                addFieldError("phone","电话不能为空");
            }
            //判断两次密码输入是否一致
            if(!user.getPwd().equals(okpwd)){
                addFieldError("userpwd", "两次密码不一致");
            }
        }
    
        public UserInfo getUser() {
            return user;
        }
    
        public void setUser(UserInfo user) {
            this.user = user;
        }
    
        public String getOkpwd() {
            return okpwd;
        }
    
        public void setOkpwd(String okpwd) {
            this.okpwd = okpwd;
        }
    }

    2.0struts.xml

    <!--测试ValidateXxxAction -->
            <action name="validatexxx" class="cn.struts.action.ValidateXxxAction" method="regist">
                <result>/success.jsp</result>
                <result name="input">/index.jsp</result>
            </action>

    3.0index.jsp:

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <%@taglib prefix="s" uri="/struts-tags" %>
    <html>
    <title>登陆页面</title>
    <body>
    <s:fielderror></s:fielderror>
    <form action="validatexxx" method="post">
        用户名:<input name="user.name"><br/>
        电话:<input name="user.phone"><br/>
        密码:<input name="user.pwd"><br/>
        确认密码:<input name="okpwd"><br/>
        <input type="submit" value="提交">
    </form>
    
    </body>
    </html>

    效果图:

    除了上述我们讲的这些验证方法之外,struts2框架自身也带有验证。

    方法四:

    1.0创建ValidateFramework继承ActionSupport

    package cn.struts.action;
    
    import cn.struts.entity.UserInfo;
    import com.opensymphony.xwork2.ActionSupport;
    
    /**
     * Created by accp on 2017/3/6.
     */
    public class ValidateFramework extends ActionSupport {
        private UserInfo user;
        private String okpwd;
    
        @Override
        public String execute() throws Exception {
            return SUCCESS;
        }
    
        public UserInfo getUser() {
            return user;
        }
    
        public void setUser(UserInfo user) {
            this.user = user;
        }
    
        public String getOkpwd() {
            return okpwd;
        }
    
        public void setOkpwd(String okpwd) {
            this.okpwd = okpwd;
        }
    }

    2.0编写ValidateFramework-validation.xml文件

    下图是框架验证中验证器的类型图:

    <!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="user.name">
            <!--自段不能为空-->
            <field-validator type="requiredstring">
                <param name="trim">true</param>
                <message>用户名不能为空</message>
            </field-validator>
            <!--判断长度是否符合-->
            <field-validator type="stringlength">
                <param name="maxLength">10</param>
                <param name="minLength">6</param>
                <message>用户名的长度必须在${minLength}到${maxLength}</message>
            </field-validator>
        </field>
        <!--判断密码和确认密码-->
        <field name="user.pwd">
            <field-validator type="requiredstring">
                <message>密码不能为空</message>
            </field-validator>
        </field>
        <field name="okpwd">
            <field-validator type="fieldexpression">
                <param name="expression">user.pwd==okpwd</param>
                <message>密码和确认密码必须一致</message>
            </field-validator>
        </field>
        <!--判断电话-->
        <field name="user.phone">
     <filed-validator type="requiredstring">
    <message>电话不能为空</message>
    </filed-validator> <field-validator type="regex"> <param name="regex">^(d{3,4}-){0,1}(d{7,8})$</param> <message>电话格式不正确</message> </field-validator> </field> </validators>

    3.0编写index.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <%@taglib prefix="s" uri="/struts-tags" %>
    <html>
    <title>登陆页面</title>
    <body>
    <s:fielderror></s:fielderror>
    <form action="regist" method="post">
        用户名:<input name="user.name"><br/>
        电话:<input name="user.phone"><br/>
        密码:<input name="user.pwd"><br/>
        确认密码:<input name="okpwd"><br/>
        <input type="submit" value="提交">
    </form>
    
    </body>
    </html>

    效果图:

    我简单的讲述了几种在struts2中常用的验证方法,在真实的开发模式中有许许多多的方法可以实现。在这里只是传递一种思想,没有多少技术含量..........

  • 相关阅读:
    我爱Java系列之---【SpringBoot打成war包部署】
    279. Perfect Squares
    矩阵dfs--走回路
    112. Path Sum
    542. 01 Matrix
    106. Construct Binary Tree from Inorder and Postorder Traversal
    105. Construct Binary Tree from Preorder and Inorder Traversal
    Invert Binary Tree
    563 Binary Tree Tilt
    145 Binary Tree Postorder Traversal
  • 原文地址:https://www.cnblogs.com/wl0000-03/p/6541371.html
Copyright © 2011-2022 走看看