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中常用的验证方法,在真实的开发模式中有许许多多的方法可以实现。在这里只是传递一种思想,没有多少技术含量..........

  • 相关阅读:
    vue 路由嵌套 (子路由跳转报错或者失效解决方法)
    vue-cli3主题色系统
    vue项目哀悼日
    el-upload 文件上传显示进度
    课表
    uni-app 开发钉钉小程序
    Linux/Centos/Ubuntu crontab备份数据库
    【转】鲁迅为厦大题写校名,为啥4个字错了3个?专家:鲁迅故意写错的。
    计数单位资料汇总(个十百千兆京...,分厘毫丝忽微纤沙尘埃...)
    【转】如意算盘:中国的第五大发明
  • 原文地址:https://www.cnblogs.com/wl0000-03/p/6541371.html
Copyright © 2011-2022 走看看