struts2中兩種validation.xml的配置方式_百度文庫

在struts中,根據配置的validation.xml文件進行頁面輸入項目的驗證已經衆所周知,本文介紹在struts2中兩種validation.xml的配置方式。能夠根據不一樣的須要進行不一樣的配置。

如下以login頁面輸入firstname,lastname,和age爲例進行說明。
struts.xml中,成功的話轉向成功頁面。不成功的話轉回到原頁面。

首先創建userbean文件。
文件名:UserBean.java
包:struts2.login.bean
文件內容:
package struts2.login.bean;

public class UserBean {
    private String firstname;
    private String lastname;
    private Integer age;
    public String getFirstname() {
        return firstname;
    }
    public void setFirstname(String firstname) {
        this.firstname = firstname;
    }
    public String getLastname() {
        return lastname;
    }
    public void setLastname(String lastname) {
        this.lastname = lastname;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    public Integer getAge() {
        return age;
    }
}

而後創建login的action文件
文件名:LoginAction.java
包:struts2.login
文件內容:
package struts2.login;

import java.util.Iterator;
import java.util.Map;
import java.util.Set;

import struts2.login.bean.UserBean;

import com.opensymphony.xwork2.ActionSupport;

@SuppressWarnings("serial")
public class LoginAction  extends ActionSupport{
    private  UserBean userBean;
    
    @Override
    public String execute() throws Exception {
        // TODO Auto-generated method stub
        return SUCCESS;
    }

    public UserBean getUserBean() {
        return userBean;
    }

    public void setUserBean(UserBean userBean) {
        this.userBean = userBean;
    }

    @Override
    public void validate() {
        // TODO Auto-generated method stub
        Map map = this.getFieldErrors();
        Set set = map.keySet();

        for (Iterator iter = set.iterator(); iter.hasNext();)
        {
            System.out.println(map.get(iter.next()));
        }
    }
 
}
對於這個文件,有兩點請注意:
1,action文件和bean文件沒有放在相同的包下,這是爲了說明第二種xml配置的文件路徑所用。
2,action文件中的validate方法只是起到一個debug錯誤message的做用,可去掉。

而後創建login.jsp文件,
文件位置:網站/work的目錄下
文件內容:
<%@ page contentType="text/html; charset=gb2312" %>
<%@ taglib uri="/struts-tags" prefix="s"%>
<html>
<s:form action="login" method="post">
<s:textfield name="userBean.firstname" label="firstname"/>
<s:textfield name="userBean.lastname" label="lastname"/>
<s:textfield name="userBean.age" label="age"/>
<s:submit/>
</s:form>
</html>

success.jsp文件
文件位置:網站/work的目錄下
文件內容:
<%@ page contentType="text/html; charset=gb2312" %>
<%@ taglib uri="/struts-tags" prefix="s"%>
<html>
LOGIN SUCCESS
</html>

而後是struts.xml文件,內容一目瞭然,沒啥說的
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

    <package name="default" extends="struts-default">
        <action name="login" class="struts2.login.LoginAction">
            <result name="success">/work/success.jsp</result>
            <result name="input">/work/login.jsp</result>
        </action>
    </package>
    
</struts>

好準備工做所有完了
下面是配置validation.xml文件的時候了

1,第一種方法,在action文件所在的目錄下面,創建一個「action名-validation.xml」這樣命名的文件

文件名:LoginAction-validation.xml
文件位置:和action文件同目錄
文件內容:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">

<validators>

    <field name="userBean.firstname">
        <field-validator type="requiredstring">
            <message>request firstname</message>
        </field-validator>
    </field>
    
    <field name="userBean.lastname">
        <field-validator type="requiredstring">
            <message>request lastname</message>
        </field-validator>
    </field>
    
    <field name="userBean.age">
        <field-validator type="required">
            <message>request integer</message>
        </field-validator>
        <field-validator type="int">
            <param name="min">1</param>
            <param name="max">150</param>
            <message>should between ${min} and ${max}</message>
        </field-validator>
    </field>
</validators>

文件內容就是firstname和lastname必須輸入,age必須是整數,而且在1到150之間。至於xml文件的寫法,這個能夠參照對應的dtd和相應的幫助。
注意的地方,1,引用firstname等字段的時候,前面加上了userBean,這個userBean是定義在action的變量,這點要一致。
2,對一個字段的多個驗證能夠寫在一塊兒,能夠參看age字段。
3,能夠使用表達式引用設定的參數值。爲${參數名}的形式。

這個文件配置完了,就能夠運行了,運行一下,什麼都不輸入,效果如圖。




第二種方法,在第一種方法的基礎上進行修改。
把validation.xml文件中的內容修改一下。

文件名:LoginAction-validation.xml
文件位置:和action文件同目錄
文件內容:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">

<validators>
 <field name="userBean">
        <field-validator type="visitor">
            <param name="context">user</param>
            <param name="appendPrefix">true</param>
            <message key="appendPrefix">user''s </message>
        </field-validator>
    </field>
</validators>

這種方法是將具體要驗證的bean的項目驗證寫在另一個validation文件中。
紅字的部分:
userBean指定了action中變量的名字。
visitor是固定的寫法。
user是另一個validation文件的名字中的一部分。

好了,另一個validation文件的內容以下:
文件名:UserBean-user-validation.xml
文件位置:和UserBean的目錄一致
文件內容:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">

<validators>

    <field name="firstname">
        <field-validator type="requiredstring">
            <message>request firstname</message>
        </field-validator>
    </field>
    
    <field name="lastname">
        <field-validator type="requiredstring">
            <message>request lastname</message>
        </field-validator>
    </field>
    
    <field name="age">
        <field-validator type="required">
            <message>request integer</message>
        </field-validator>
        <field-validator type="int">
            <param name="min">1</param>
            <param name="max">150</param>
            <message>should between ${min} and ${max}</message>
        </field-validator>
    </field>
</validators>

注意地方,1文件的命名,爲「bean的class名-context參數指定的值-validation.xml」
2,文件中字段的名字的地方,不須要有userBean的前綴。

好,執行一下,效果如圖:




總結一下:
第一種validation方式,把驗證集中action的驗證文件中。當驗證的內容少或者不一樣的action驗證的內容重複性小的時候適用。
第二種validation方式,把驗證集中在bean的驗證文件中。當多個action都須要對相同bean的內容進行驗證html

相關文章
相關標籤/搜索