日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ActionForm类及表单数据验证

發布時間:2024/9/27 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ActionForm类及表单数据验证 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在Struts的中央控制器中寫了Struts的控制器角色,在這篇介紹下Struts的視圖!
Struts的視圖組件:
Struts框架中的視圖組件主要包括:
JSP頁面。
ActionForm類。
Struts自定義標記。
消息資源。
其中, ActionForm類是Struts框架的核心組件之一,是Struts的關鍵視圖組件。在這篇文章中,將討論 ActionForm類及其作用。
ActionForm的作用機理:
ActionForm本質上是一種JavaBean,是專門用來傳遞表單數據的DTD(Data Transfer Object,數據傳遞對象)。它包括用于表單數據驗證的validate()方法和用于數據復位的reset()方法。
Struts 框架利用 ActionForm對象來臨時存放視圖頁面中的表單數據。例如,一個登錄頁面會有一個用戶名輸入框和一個密碼輸入框,以及用來提交登錄請求的按扭。當用戶提交登錄請求后,Struts將用戶名和密碼兩個輸入域的數據自動填充到相應的 ActionForm對象中,然后控制層可以從該 ActionForm對象中讀取用戶輸入的表單數據,也可以把來自模型層的數據存放到 ActionForm中,然后返回給視圖顯示。
ActionForm有(request)和 (session)兩種作用域(scope)。如果 ActionForm的作用域設定為request, ActionForm實例將保存在request 對象中,像其他保存在request對象中的屬性一樣,僅在當前請求范圍內有效。如果 ActionForm的作用域設定為session,那么 ActionForm實例將被保存在session對象中,同一個 ActionForm實例在整個HTTP會話中有效。
在Struts框架 中, ActionForm的作用機理如下圖:



當驗證 ActionForm時,如果檢測到一個或多個驗證錯誤,Struts框架會把錯誤轉發回配置文件struts-config.xml中<action>元素的input屬性所指定的輸入頁面。

ActionForm的使用方法:
下面通過在(Struts重構)構建一個簡單的基于MVC模式的JavaWeb的例子,來介紹一下 ActionForm的正確使用,包括如何創建,配置和訪問。
1.創建 ActionForm
可以擴展Struts軟件包的 ActionForm類來創建具體的 ActionForm。Struts軟件包中的 ActionForm類本身是一個抽象類,在擴展的時候,為每一個要從HTML表單中捕獲的輸入域定義一個屬性,使表單輸入域與 ActionForm屬性一一對應,以使 ActionForm能夠捕獲需要的表單輸入。定義了具體的屬性,就可以覆蓋父類的validate()和reset()方法,來實現具體的 ActionForm驗證規則和初始化方法。
下面是我在(Struts重構)構建一個簡單的基于MVC模式的JavaWeb里面的例子
/**//*
* Generated by MyEclipse Struts
* Template path: templates/java/JavaClass.vtl
*/
package struts.form;

import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action. ActionForm;
import org.apache.struts.action.ActionMapping;

/** *//**
* Struts框架的 ActionForm對象,它可用來在用戶和業務層之間輿用戶的輸入數據。
* ActionForm也叫FormBean.Struts框架會自動從請求中懼輸入數據,再將 這些
* 數據交給一個使用FormBean的Action對象,接著FormBean可以再交給業務層
*/
public class LoginHandlerForm extends ActionForm {
??? /**//*
???? * Generated fields
???? */

??? /** *//** userName property */
??? private String userName;

??? /** *//** userPwd property */
??? private String userPwd;

??? //驗證方法,主要用于驗證視圖上的數據,例如非空之類,
??? //如果要進行業務驗證,則應該在Action中進行!
??? public ActionErrors validate(ActionMapping mapping,
??????????? HttpServletRequest request) {
???????
??????? return null;
??? }
??? //初始化首先調用的方法
??? public void reset(ActionMapping mapping, HttpServletRequest request) {
??????? // TODO Auto-generated method stub
??? }

??? public String getUserName() {
??????? return userName;
??? }

??? public void setUserName(String userName) {
??????? this.userName = userName;
??? }

???
??? public String getUserPwd() {
??????? return userPwd;
??? }

??? public void setUserPwd(String userPwd) {
??????? this.userPwd = userPwd;
??? }
}

在以上的loginActionForm中,validate()方法和reset()方法是 ActionForm中兩種可以覆蓋的方法。validate()方法中定義具體的 ActionForm驗證規則。

2.配置 ActionForm
每創建一個 ActionForm類,就需要在Struts的配置文件中配置這個類。如上的類配置如下:
<form-beans >
??? <form-bean name="loginHandlerForm" type="struts.form.LoginHandlerForm" />

? </form-beans>

<form-beans>元素用來指定全體 ActionForm的配置,一個Struts應用所有的 ActionForm的配置都要位于該元素標記內。<form-beans>元素的子元素<form-bean>用來配置一個具體的 ActionForm類,每個<form-bean>元素對應的內容為一個form bean實例。一旦定義了<form-bean>元素,就可以在Action中使用它了。

3.訪問 ActionForm
ActionForm可以被JSP,Struts自定義標記,Action或其他Web組件訪問。訪問 ActionForm的一般方法如下:
a) 使用Struts HTML標記庫
Struts HTML標記庫提供了一組和 ActionForm密碼關聯的標記,這些標記對應到HTML表單域。如<html:form>標記對應HTML 的<form>標記,<html:text>對應HTML表單的text類型的<input>輸入域。這些標記和 ActionForm交互,以把 ActionForm中的屬性值顯示出來。
b)? 從request或session對象中取出 ActionForm對象
根據作用域的不同,Struts框架把 ActionForm實例保存在request或session對象中,保存時采用的key值為<form- bean>元素的名字,即name屬性的值。因此,可以像取出任何存放在request或session對象中的屬性一樣取出 ActionForm 實例。如:
LoginHandlerForm loginHandlerForm = (LoginHandlerForm)request.getAttribute("loginHandlerForm");???????
???????

c)在Action類的execute()方法中直接訪問 ActionForm
如果配置了 ActionForm和Action映射,Struts框架就會把 ActionForm作為參數傳給Action類的execute()方法,在execute()方法中,可以直接讀取或設置 ActionForm屬性。在Action中使用 ActionForm的示例如下:
??? public ActionForward execute(ActionMapping mapping, ActionForm form,
??????????? HttpServletRequest request, HttpServletResponse response) {
??? LoginHandlerForm loginHandlerForm = (LoginHandlerForm) form;???????
??????? //從Form中取得表單數據
??????? String userName = loginHandlerForm.getUserName();
??????? String userPwd = loginHandlerForm.getUserPwd();
??????? //(略)
??????? return mapping.findForward(forward);
???????
??? }


表單的數據驗證
在上面的LoginHandlerForm代碼中我們看到validate()方法體幾乎是空的,也就是說 LoginHandlerForm沒有啟動對表單數據進行驗證的功能。我們也看到validate()方法返回的是一個ActionErrors對象。該對象封裝了驗證過程中所發現的錯誤。
表單驗證是 ActionForm的一個主要的功能之一。要實現這個功能,我們需要采取4個步驟:
a)重寫validate()方法。
b)在資源文件ApplicationResources.properties中設置可能的驗證錯誤的標識。
c)要在配置文件struts-config.xml中,把<action>元素的validate屬性設置為true(默認已經是true),并添加<message-resources>元素以指明資源文件的存放路徑。
d)在相應輸入頁面的相應位置加入錯誤標記<html:errors>,以輸出可能的驗證錯誤。
如上代碼,如果我們要在LoginHandlerForm中實現輸入數據驗證功能,則相應采取上術四步。
1.重寫validate()方法,如下:
//驗證方法,主要用于驗證視圖上的數據,例如非空之類,
??? //如果要進行業務驗證,則應該在Action中進行!
??? public ActionErrors validate(ActionMapping mapping,
??????????? HttpServletRequest request) {
???????
??????? ActionErrors errors = new ActionErrors();
??????? if(userName == null || userName.length()<3)
??????????????????? //此處userName為錯誤key,在前面頁面中要使用該名字以顯示
??????????? errors.add("userName",new ActionMessage("error.login.userName",userName));
??????? if(userPwd == null || userPwd.length()<3)
??????????? errors.add("userPwd",new ActionMessage("error.login.userPwd",userPwd));
??????? return errors;
??? }
在以上代碼中我們使用 了ActionErrors類和ActionMessage類。ActionErrors類封裝了一組驗證錯誤,它的用法類似 Map類。而ActionMessage類封裝了單個驗證錯誤,它的構造函數內的參數就指向資源文件內的一個錯誤文本。例如語句"ActionMessage("error.login.userName")"中的參數"error.login.userName" 其實就是資源文件ApplicationResources.properties中的一條錯誤文本的鍵(key)。通過ActionErrors對象的 add()方法,可以把ActionMessage對象加入到ActionErrors對象中。
2.設置資源文件
在struts的資源文件ApplicationResources.properties中設置可能的驗證錯誤的標識:
# Resources for parameter 'struts.ApplicationResources'
# Project MVCStruts
error.login.userName=用戶名必須填寫且長度不小于3
error.login.userName=密碼必須填寫且長度不小于3
在資源文件中我們不能直接寫中文,否則會出現亂碼,至于我這里中文一是方便看,二是我按照了插件,可以自動過濾!插件可參考解決Struts中ApplicationResources.properties文件不支持中文問題
3.修改配置文件struts-config.xml
將配置文件struts-config.xml中<action>元素的validate屬性設置為true,此處,還需要<message-resources>元素,以指明資源文件的路徑。如下:
<action
????? attribute="loginHandlerForm"
????? input="/login.jsp"
????? name="loginHandlerForm"
????? path="/loginHandler"
????? scope="request"
????? validate="true"
????? type="struts.action.LoginHandlerAction" >
??? <!-- action與視圖組件的聯系在配置文件中寫,這樣就大大降低了Action和VIEW的耦合性? -->
????????? <forward name="success" path="/main.jsp" />
????????? <forward name="fail" path="/register.jsp" />
???? </action>
<!-- 資源文件 -->
? <message-resources parameter="struts.ApplicationResources" />


資源文件書寫類似JAVA文件,有包之分,注意是點號,不要寫成反斜杠/
4.在頁面 中加入錯誤標記:
<%@ page language="java" pageEncoding="GBK"%>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean"%>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html"%>
<html>
??? <head>
??????? <title>JSP for LoginHandlerForm form</title>
??? </head>
??? <body>
??????? <html:form action="/loginHandler">
??????????? userName : <html:text property="userName"/><html:errors property="userName"/><br/>
??????????? userPwd : <html:text property="userPwd"/><html:errors property="userPwd"/><br/>
??????????? <html:submit/><html:cancel/>
??????? </html:form>
??? </body>
</html>


<html:errors>是struts的一個自定義標記。它能根據它的property屬性從資源文件中取出相應的驗證錯誤,并輸入頁面中指定的位置顯示驗證錯誤。

總結

以上是生活随笔為你收集整理的ActionForm类及表单数据验证的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久精品国产清自在天天线 | 午夜剧场免费在线观看 | 91在线影院 | 国产高清免费在线 | 国产另类在线 | 丰满熟妇肥白一区二区在线 | 欧美在线免费观看视频 | 最污网站在线观看 | 秘密爱大尺度做爰呻吟 | 美女av影院| 欧美片网站yy | 国产精品1000部啪视频 | 会喷水的亲姐姐 | 啪啪五月天 | 全国男人的天堂网 | 欧美午夜精品 | 人体私拍套图hdxxxx | 欧美午夜三级 | 精品妇女一区二区三区 | 免费黄网站在线观看 | 亚洲日本香蕉 | 亚洲s码欧洲m码国产av | 日皮视频在线观看 | 国产经典一区二区 | 日韩一区二区在线播放 | 欧美一级做 | 好吊妞在线| 狠狠操影视| 日本乱轮视频 | 亚洲国产欧美另类 | 久色视频在线观看 | 毛片大全免费 | 男人添女人囗交视频 | 日日躁夜夜躁aaaabbbb | 最好看的2019中文大全在线观看 | 超碰超碰97 | 熟睡侵犯の奶水授乳在线 | 国产精品久久麻豆 | 无遮挡av | 波多野结衣福利视频 | 人人妻人人澡人人爽人人精品 | 深夜天堂| 日本三区在线 | 久久精久久 | 手机av在线网 | 四虎成人精品永久免费av九九 | 国产三级三级在线观看 | 国产精品高潮呻吟av | 欧美日韩免费观看视频 | 国产日韩网站 | 黄色日本视频 | 中文字幕xxx | 国产成人精品一区在线播放 | 欧美日韩亚洲一区二区 | 中文字幕在线播放一区 | 国产三级精品三级在线观看 | 黑人一级 | 欧美韩一区 | a天堂视频 | 亚洲欧洲中文字幕 | 精品在线播放视频 | mm1313亚洲国产精品美女 | 亚洲人人人 | 一区二区三区视频在线观看免费 | 欧美另类高清 | a∨鲁丝一区鲁丝二区鲁丝三区 | 国产精品一线天 | 成人香蕉视频 | 日韩aⅴ在线观看 | 日本伦理片在线播放 | 97超碰精品 | 久久久一级黄色片 | 五月婷综合 | www.com黄色| 国产精品免费大片 | 婷婷视频一区 | 久久无码精品丰满人妻 | 99久久99久久久精品棕色圆 | 久久精品网 | 可以在线观看的av网站 | 国产一区二区三区四 | www.人人草| 欧美日韩精品二区 | 999这里只有精品 | 一级毛片儿 | 99成人免费视频 | 6080亚洲精品一区二区 | 午夜精品视频 | 韩国一区二区三区在线观看 | 国模无码国产精品视频 | 超污巨黄的小短文 | 一区二区不卡在线观看 | 欧美精彩视频 | 国产精品一二三 | 欧美在线 | 一区二区三区在线播放 | 91无限观看 | 亚洲国产激情 | 午夜激情福利视频 |