Struts2校驗框架

1、以前是在動作類的excute業務方法里寫校驗代碼,這樣是不好的,校驗代碼和業務邏輯代碼混合,可讀性差,而且增加維護難度。
2、我們現在使用validate或validateXxx方法校驗。就是在動作類里重寫ActionSupport類的validate()或放到自定義的validateXxx(),但是這樣當字段較多的時候,也會很臃腫。
3、所以最好的辦法就是定義一個動作類名-validation.xml或動作類名-動作名-validation.xml,并且保存在動作類同一目錄下的xml校驗配置文件。如動作類名為BAction,則該xml為BAction-validation.xml.
然后必須在xml校驗配置文件中對每個校驗字段配置校驗器。

image.png

校驗器的配置方法有兩種

字段型校驗方式


image.png

非字段型方式

image.png

一般用第一種,其中的key是引用國際化。

image.png

例子:

image.png

User.java

public class User {
    private String name;
    private String password1;
    private String password2;
    private int age;
    private Date birthday;
    private String email;
        //get和set方法省略
}

注冊動作類,注意一般要把pojo和動作類分開寫,
不要動作類里還寫上面那些字段。但是表單提交是提交到動作類的,也就是說動作類必須得有相同和字段取獲取表單提交的值。這時候我們用到ModelDriver,可以看看這個http://blog.csdn.net/li_tengfei/article/details/6098145
···
package com.ljs.struts.action;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

public class RegisterAction extends ActionSupport implements ModelDriven {
private User user = new User();
public Object getModel() {
// TODO Auto-generated method stub
return user;
}
public String register() throws Exception {
return SUCCESS;
}
}

register.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<link rel="stylesheet" type="text/css" href="<s:url value="/styles/styles.css"/>">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  </head>
  <body>
    <s:form action="Register" namespace="/user">
        <s:textfield name="name" label="用戶名"/>
        <s:password name="password1" label="密碼"/>
        <s:password name="password2" label="確認密碼"/>
        <s:textfield name="age" label="年齡"/>
        <s:textfield name="birthday" label="生日"/>
        <s:textfield name="email" label="email"/>
        <s:submit value="提交" cssStyle="float:right"/>
    </s:form>
  </body>
</html>

style.css
設置label為斜體,出錯就為紅色和斜體,錯誤信息紅色和加粗

.label {font-style:italic; }

.errorLabel {font-style:italic; color:red; }

.errorMessage {font-weight:bold; color:red; }

RegisterAction-Register.xml
記住Register的R要大寫,雖然方法是小寫,但是這里要大寫,沒有會出錯。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE validators PUBLIC 
  "-//Apache Struts//XWork Validator 1.0.2//EN"
  "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">
<validators>
    <field name="name">
        <field-validator type="requiredstring">
            <message key="errors.name.requiredstring"/>
        </field-validator>
        <field-validator type="stringlength">
            <param name="minlength">2</param>
            <param name="maxlength">6</param>
            <message key="errors.namelength"/>
        </field-validator>
    </field>
    <field name="password1">
        <field-validator type="requiredstring">
            <message key="errors.password1.requiredstring"/>
        </field-validator>
        <field-validator type="regex">
            <param name="regexExpression">
            <![CDATA[(\w{4,15})]]>
            </param>
            <message key="errors.password"/>
        </field-validator>
    </field>
    <field name="password2">
        <field-validator type="fieldexpression">
            <param name="expression">
            <![CDATA[password1==password2]]>
            </param>
            <message key="errors.passwordequals"/>
        </field-validator>
    </field>
    <field name="age">
        <field-validator type="int">
            <param name="min">1</param>
            <param name="max">150</param>
            <message key="errors.age"/>
        </field-validator>
    </field>
    <field name="birthday">
        <field-validator type="required">
            <message key="birthday.error.message"/>
        </field-validator>
        <field-validator type="date">
            <param name="min">1990-01-01</param>
            <param name="max">2017-01-01</param>
            <message key="birthday.error.message"/>
        </field-validator>
    </field>
    <field name="email">
        <field-validator type="email">
            <message key="errors.email"/>
        </field-validator>
    </field>
</validators>

RegisterAction.properties

a.png

struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
    "http://struts.apache.org/dtds/struts-2.5.dtd">
<!-- Struts2配置文件的根元素 -->
<struts>
    <package name="lab07" extends="struts-default"  namespace="/user">
        <action name="Register" class="com.ljs.struts.action.RegisterAction" method="register">
            <result name="input">/register.jsp</result>
            <result name="success">/success.jsp</result>
        </action> 
    </package>
</struts>
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容