Struts2 Part5

原作者:尚硅谷-佟刚

验证


这里写图片描述


validation.jsp


<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">

    <title>My JSP 'validation.jsp' starting page</title>

    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->

  </head>

  <body>

     <s:debug/>
     <br>
     <s:actionerror/>

     <!-- 要求年龄必须在20-60之间 -->
     <s:form action="testValidation" theme="simple">
        Age:<s:textfield name="age" label="Age"/>
        <s:fielderror fieldName="age"/>
        <br>
        <!--  
          <s:property value="fieldErrors.age[0]"/>
        -->

        Password:<s:password name="password"/>
        <br>
        Password2:<s:password name="password2"/>
        <br>
        Count:<s:textfield name="count"/>
        <s:fielderror fieldName="count"/>        
        <br>
        idCard:<s:textfield name="idCard"/>
        <s:fielderror fieldName="idCard"/>
        <br>
        <s:submit/>
     </s:form>

  </body>
</html>

struts2配置文件


 <!-- 配置国际化资源文件 --> 
    <constant name="struts.custom.i18n.resources" value="i18n"/>

      <action name="testValidation" class="com.atguigu.struts2.validation.app.TestValidationAction">
           <result>/success.jsp</result>

           <!-- 若验证失败转向input -->
           <result name="input">/validation.jsp</result>
        </action>  

TestValidationAction.java


package com.atguigu.struts2.validation.app;

import com.opensymphony.xwork2.ActionSupport;

public class TestValidationAction extends ActionSupport {

    private Integer age;
    private String password;
    private String password2;
    private Integer count;
    private String idCard;

    public String getIdCard() {
        return idCard;
    }

    public void setIdCard(String idCard) {
        this.idCard = idCard;
    }

    public Integer getCount() {
        return count;
    }

    public void setCount(Integer count) {
        this.count = count;
    }

    public String getPassword() {
        return password;
    }

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

    public String getPassword2() {
        return password2;
    }

    public void setPassword2(String password2) {
        this.password2 = password2;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String execute() throws Exception {
        System.out.println("age: " + age);
        return SUCCESS;
    }
}

TestValidationAction-validation.xml

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

<validators>

    <!-- 针对于age属性进行验证,基于字段的验证 -->
    <field name="age">
        <!-- 
                          设置短路验证:若当前验证没有通过,则不再进行下面的验证
         -->
        <field-validator type="conversion" short-circuit="true">
            <message>^Conversion Error Occurred</message>
        </field-validator>

        <field-validator type="int">
            <param name="min">20</param>
            <param name="max">60</param>
            <message key="error.int"/>
        </field-validator>

    </field>

    <field name="count">
       <field-validator type="int">
            <param name="min">1</param>
            <param name="max">10</param>
            <message key="error.int"/>
       </field-validator>
    </field>

    <field name="idCard">
         <field-validator type="idcard">
            <message>It is not a idCard</message>
         </field-validator>
    </field>

    <!-- 测试非字段验证 -->
    <validator type="expression">
           <param name="expression">
             <![CDATA[password==password2]]>
           </param>
           <message>Password is not equals to password2</message>
    </validator>


</validators>

i18n.properties

error.int=^^^${getText(fieldName)} needs to be between ${min} and ${max}
age=\u5E74\u9F84
count=\u6570\u91CF

validatos.xml


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
        "-//Apache Struts//XWork Validator Definition 1.0//EN"
        "http://struts.apache.org/dtds/xwork-validator-definition-1.0.dtd">

<!-- START SNIPPET: validators-default -->
<validators>
  <validator name="idcard" class="com.atguigu.struts2.validation.app.IDCardValidator"/>
</validators>

IDCardValidator.java

package com.atguigu.struts2.validation.app;

import com.opensymphony.xwork2.validator.ValidationException;
import com.opensymphony.xwork2.validator.validators.FieldValidatorSupport;

public class IDCardValidator extends FieldValidatorSupport {

    @Override
    public void validate(Object object) throws ValidationException {
        //1.获取字段的名字和值
         String fieldName = getFieldName();
         Object value = this.getFieldValue(fieldName, object);


        //2.验证
         IDCard idCard=new IDCard();
         boolean result=idCard.Verify((String)value);


        //3.若验证失败,则....
         if(!result){
             addFieldError(fieldName, object);
         }

    }

}

IDCard.java

package com.atguigu.struts2.validation.app;

public class IDCard {
    final int[] wi = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1 };
    final int[] vi = { 1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2 };
    private int[] ai = new int[18];

    public IDCard() {}

    public boolean Verify(String idcard) {
        if (idcard.length() == 15) {
            idcard = uptoeighteen(idcard);
        }
        if (idcard.length() != 18) {
            return false;
        }
        String verify = idcard.substring(17, 18);
        if (verify.equals(getVerify(idcard))) {
            return true;
        }
        return false;
    }

    public String getVerify(String eightcardid) {
        int remaining = 0;

        if (eightcardid.length() == 18) {
            eightcardid = eightcardid.substring(0, 17);
        }

        if (eightcardid.length() == 17) {
            int sum = 0;
            for (int i = 0; i < 17; i++) {
                String k = eightcardid.substring(i, i + 1);
                ai[i] = Integer.parseInt(k);
            }

            for (int i = 0; i < 17; i++) {
                sum = sum + wi[i] * ai[i];
            }
            remaining = sum % 11;
        }

        return remaining == 2 ? "X" : String.valueOf(vi[remaining]);
    }

    public String uptoeighteen(String fifteencardid) {
        String eightcardid = fifteencardid.substring(0, 6);
        eightcardid = eightcardid + "19";
        eightcardid = eightcardid + fifteencardid.substring(6, 15);
        eightcardid = eightcardid + getVerify(eightcardid);
        return eightcardid;
    }

    public static void main(String[] args) {

        String idcard1 = "350211197607142059"; 
        String idcard2 = "350211197607442059";

        IDCard idcard = new IDCard(); 
        System.out.println(idcard.Verify(idcard1)); 
        System.out.println(idcard.Verify(idcard2)); 
    }

}

覆盖struts的默认文件,添加如下代码

这里写图片描述


这里写图片描述


页面运行结果


这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值