• 数据验证


    (1)a:手工编写代码实现对Action中所有方法执行之前的验证

          很简单就是讲对应的Action类继承ActionSupport父类后并对父类中的validate方法进行重写即可;

          例如:

     1 package com.bjyinfu.struts.actions;
     2 
     3 import java.util.regex.Pattern;
     4 
     5 import com.opensymphony.xwork2.ActionSupport;
     6 
     7 public class LoginAction4 extends ActionSupport {
     8 
     9     private String mobile;
    10     private String name;
    11     public String getMobile() {
    12         return mobile;
    13     }
    14     public void setMobile(String mobile) {
    15         this.mobile = mobile;
    16     }
    17     public String getName() {
    18         return name;
    19     }
    20     public void setName(String name) {
    21         this.name = name;
    22     }
    23     public String doFirst(){
    24         return "success";
    25     }
    26     public String doSecond(){
    27         return "success";
    28     }
    29     @Override
    30     public void validate() {
    31         //等于null是为了防止越过表单方法问
    32         if(name==null || "".equals(name.trim())){
    33             //底层有个集合叫fieldErrors.size()>0,说明有验证失败的信息,此时会自动跳转到input视图
    34             this.addFieldError("name", "用户名不能为空");
    35         }
    36         if(mobile==null || "".equals(mobile.trim())){
    37             this.addFieldError("mobile", "手机号不能为空");
    38         }else if(!Pattern.matches("^1[34578]\d{9}", mobile)){
    39             this.addFieldError("mobile", "手机号不符合规定");
    40         }
    41     }
    42 }

        b:手工编写代码实现对Action中指定方法执行之前的验证

          修改被重写的方法名即可。例如:只要吧验证方法名改为validate+actionName;validate固定写法,actionName被指定的验证方法名;这样即可验证指定方法;

     1 package com.bjyinfu.struts.actions;
     2 
     3 import java.util.regex.Pattern;
     4 
     5 import com.opensymphony.xwork2.ActionSupport;
     6 
     7 public class LoginAction4 extends ActionSupport {
     8 
     9     private String mobile;
    10     private String name;
    11     public String getMobile() {
    12         return mobile;
    13     }
    14     public void setMobile(String mobile) {
    15         this.mobile = mobile;
    16     }
    17     public String getName() {
    18         return name;
    19     }
    20     public void setName(String name) {
    21         this.name = name;
    22     }
    23     public String doFirst(){
    24         return "success";
    25     }
    26     public String doSecond(){
    27         return "success";
    28     }
    29 
    30     //这样只会在执行doFirst()方法之前进行验证,而执行doSecond()方法之前不会进行任何验证
    31     public void validateDoFirst() {
    32         //等于null是为了防止越过表单方法问
    33         if(name==null || "".equals(name.trim())){
    34             //底层有个集合叫fieldErrors.size()>0,说明有验证失败的信息,此时会自动跳转到input视图
    35             this.addFieldError("name", "用户名不能为空");
    36         }
    37         if(mobile==null || "".equals(mobile.trim())){
    38             this.addFieldError("mobile", "手机号不能为空");
    39         }else if(!Pattern.matches("^1[34578]\d{9}", mobile)){
    40             this.addFieldError("mobile", "手机号不符合规定");
    41         }
    42     }
    43 }

    若要将验证没通过的结果展现在对应视图上只需要在对应的input视图页面上引入struts2标签然后在添加<s:fielderror/>即可:

     1 <%@ page language="java" contentType="text/html; charset=UTF-8"
     2     pageEncoding="UTF-8"%>
     3     <%@taglib uri="/struts-tags" prefix="s" %>
     4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     5 <html>
     6 <head>
     7 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
     8 <title>My First Struts2 Project</title>
     9 </head>
    10 <body>
    11 <!-- 用ognl表达式将Action中的fieldError中的自定义显示内容展现在页面 -->
    12 <s:fielderror/>
    13 <form action="${pageContext.request.contextPath }/validate/login_validate.action" method="post">
    14         用户名<input type="text" name="name"><br>
    15         手机号<input type="text" name="mobile"><br>
    16         <input type="submit" value="登录">
    17 </form>
    18 </body>
    19 </html>

     展示结果:

    (2)a:通过xml配置文件的方法,对Action中的所有方法执行之前的验证:

      首先定义一个xml文件,文件名定义规则:ActionClassName-validation.xml;其中ActionClassName对应的是方法的类名,-validation.xml是固定的,并且此xml文件要放到与对应的方法的文件放到同一个包中,每个xml文件都有约束标签,大部分xml文件中的约束标签是从struts2-core.jar包中找的  图示:

    而在此验证配置文件中的约束标签不是从此处找的,而是从xwork.core.jar中找的,图示:

     对应的Action方法:

     1 package com.bjyinfu.struts.actions;
     2 
     3 
     4 import com.opensymphony.xwork2.ActionSupport;
     5 
     6 public class LoginAction5 extends ActionSupport {
     7 
     8     private String mobile;
     9     private String name;
    10     public String getMobile() {
    11         return mobile;
    12     }
    13     public void setMobile(String mobile) {
    14         this.mobile = mobile;
    15     }
    16     public String getName() {
    17         return name;
    18     }
    19     public void setName(String name) {
    20         this.name = name;
    21     }
    22     public String execute(){
    23         System.out.println("执行默认方法");
    24         return "success";
    25     }
    26     public String doFirst(){
    27         System.out.println("111111111");
    28         return "success";
    29     }
    30     public String doSecond(){
    31         System.out.println("222222222");
    32         return "success";
    33     }
    34 }

    对应的登录界面,同时发生验证失败是的input视图:

     1 <%@ page language="java" contentType="text/html; charset=UTF-8"
     2     pageEncoding="UTF-8"%>
     3     <%@taglib uri="/struts-tags" prefix="s" %>
     4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     5 <html>
     6 <head>
     7 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
     8 <title>My First Struts2 Project</title>
     9 </head>
    10 <body>
    11 <!-- 用ognl表达式将Action中的fieldError中的自定义显示内容展现在页面 -->
    12 <s:fielderror/>
    13 <form action="${pageContext.request.contextPath }/validate/login_validate.action" method="post">
    14         用户名<input type="text" name="name"><br>
    15         手机号<input type="text" name="mobile"><br>
    16         <input type="submit" value="登录">
    17 </form>
    18 </body>
    19 </html>

    在struts.xml中注册方法:

    编写验证xml文件:此文件名为LoginAction5-validation.xml

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE validators PUBLIC
     3           "-//Apache Struts//XWork Validator 1.0.3//EN"
     4           "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
     5 <validators>
     6     <!-- 此name为需要被验证的属性 -->
     7     <field name="name">
     8         <!-- 对于此属性进行验证的验证器类型可以有一个或者多个 -->
     9         <field-validator type="requiredstring">
    10             <!-- param有0个或者多个,可以看做是判断条件,必须放在message前面 -->
    11             <param name="trim">true</param>
    12             <!-- 必须要有且唯一 -->
    13             <message>用户名不能为空!</message>
    14         </field-validator>
    15     </field>
    16     <field name="mobile">
    17         <field-validator type="requiredstring">
    18             <param name="trim">true</param>
    19             <message>手机号不能为空!</message>
    20         </field-validator>
    21         <field-validator type="regex">
    22             <!-- <![CDATA[]]> CDATA数据区,用于写特殊的表达式 -->
    23             <param name="regex"><![CDATA[1[34578]d{9}]]></param>
    24             <message>手机号格式不正确!</message>
    25         </field-validator>
    26     </field>
    27 </validators>

    b:通过xml配置文件的方法,对Action中的指定方法执行之前的验证:

    只需要将验证xml文件的文件名加上对应的struts.xml文件中的注册方法名即可:

    例:验证所有方法是 LoginAction5-validation.xml;

     将此名称改为:LoginAction5-login_doFirst-validation.xml;

      此时就是只对doFirst方法进行验证,而不验证其他方法;

  • 相关阅读:
    2019 ICPC Asia Nanchang Regional E Eating Plan 离散化+前缀和
    2018icpc南京/gym101981 G Pyramid 找规律
    2018icpc沈阳/gym101955 J How Much Memory Your Code Is Using? 签到
    2018icpc南京/gym101981 K Kangaroo Puzzle 随机化
    series_02
    series_01
    locust_参数化关联
    locust_关联
    locust_单接口
    截图处理
  • 原文地址:https://www.cnblogs.com/lubolin/p/7269663.html
Copyright © 2020-2023  润新知