struts2學習筆記(6)---數據驗證之validate()方法

問題引入

通常在form表單輸入數據提交前,會進行輸入的驗證和限制,比如登陸時賬戶和密碼不能爲空,註冊時兩次輸入密碼必須一致……一般可用JS進行控制。而struts2中提供了更爲便捷的方法。

使用Action的validate()方法

1.Action繼承ActionSupport
2.在Action中覆寫validate()方法
3.在validate()方法中使用addFieldError()方法,配置struts.xml文件。

源代碼

UserAction.java

package org.dny.action;

import org.dny.model.User;

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

public class UserAction extends ActionSupport implements ModelDriven<User>{
    private User user;

    @Override
    public User getModel() {
        if(this.user == null)
            this.user = new User();

        return this.user;
    }

    public String login() {  //登錄
        System.out.println("UserAction login");
        System.out.println("userName:"+user.getUserName());
        System.out.println("paswword:"+user.getPassword());

        return "loginSuccess";
    }

    @Override
    public void validate() {   //在Action的所有其他函數之前函數之前執行,進行驗證
        System.out.println("UserAction validate");

        if(user.getUserName() == null || user.getUserName().trim().equals(""))
            this.addFieldError("userName", "帳號不能爲空");   //給userName屬性添加錯誤消息“帳號不能爲空”
        if(user.getPassword() == null || user.getPassword().trim().equals(""))
            this.addFieldError("password", "密碼不能爲空");
    }
}

1.函數addFieldError(“字段名”,”錯誤信息”):給一個字段(屬性)添加錯誤消息
2.點擊登錄,調用Action的login()方法。而在Action的login()方法執行之前,會先執行validate()方法。
3.如果在validate()方法中執行了addFieldError()或者addActionError()方法,則Action不會執行login()方法,而是直接跳轉到一個名爲”input”的result視圖。

struts.xml文件的action配置:

<action name="user_*" class="org.dny.action.UserAction" method="{1}">
            <result name="loginSuccess">/success.jsp</result>
            <result name="input">/index.jsp</result>
</action>

1.當登錄成功時,會跳轉到success.jsp頁面
2.當輸入沒有通過validate()函數的驗證時,會跳轉到首頁。

index.jsp頁面:

<body>
    <center>
        <!-- 普通的表單提交 -->
        <form action="user_login" method="post">
            <table>
                <tr>
                    <td>帳號:</td>
                    <td><input type="text" name="userName"></td>
                    <td>
                        <!-- 通過EL表達式取出 fieldErrors中userName的值 -->
                        ${fieldErrors['userName'][0]}
                    </td>
                </tr>
                <tr>
                    <td>密碼:</td>
                    <td><input type="password" name="password"></td>
                    <td>
                        <!-- 通過EL表達式取出 fieldErrors中password的值 -->
                        ${fieldErrors['password'][0]}
                    </td>
                </tr>
                <tr>
                    <td></td>
                    <td align="left"><input type="submit" value="登錄"> <input
                        type="reset" value="重置">
                </tr>
            </table>
        </form>
    </center>

    <hr>

    <center>
        <!-- 通過EL表達式取出 fieldErrors中全部的錯誤消息 -->
        ${fieldErrors}<br>
        <!-- 通過struts標籤取出fielderror中全部的錯誤消息 -->
        <s:fielderror />
    </center>

    <hr>

    <center>
        <!-- 使用struts提供的標籤的表單,可以在每一個textfield前面顯示錯誤信息 -->
        <s:form action="user_login" method="post">
            <s:textfield name="userName" label="帳號" />
            <s:textfield name="password" label="密碼" />
            <s:submit value="提交"></s:submit>
        </s:form>
    </center>

    <hr>
    <center>
        <s:debug/>
    </center>
</body>

1.要使用struts標籤,還需在頁面首部上加上:

<%@ taglib prefix="s" uri="/struts-tags"%>

2.錯誤信息fieldErrors既可以由EL表達式取得,又可以由struts標籤<s:fielderror />取得。
3.使用<s:form></form>的好處:如果驗證錯誤,錯誤信息會直接顯示在對應屬性的textfield前面。

運行結果及截圖

1.驗證通過,登錄成功的情況:
這裏寫圖片描述

這裏寫圖片描述

這裏寫圖片描述

2.驗證失敗,重新跳轉到index.jsp的情況:
這裏寫圖片描述

這裏寫圖片描述

這裏寫圖片描述

點擊debug標籤:
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章