Struts旅程(三)Struts表單處理器ActionForm(靜態動態)
上篇我們以登入為例講解了struts配置,實現了使用struts框架進行登入的示例。一些名詞已經在腦海中飄蕩了。
ActionServlet:struts的控制器,負責擷取URL或分發。提供Model(模型層)和View(檢視層)使用,因此可將它看作是模型和檢視之間的中介。
ActionForm:用於封裝使用者的請求引數,而請求引數是通過JSP頁面的表單域傳遞過來的。
Action:使用者請求和和業務邏輯的橋樑,每個Action作為業務邏輯的代理,可以呼叫業務邏輯。
一些問題是有必要再次提起的。
使用基本的MVC和使用struts框架區別,使用struts好處在哪裡?
我們知道我們不適用框架的時候,在
而且從表單中傳遞過來的資料全是字串形式,我們還需要根據實際的需求把字串轉換為我們需要的型別,如果很多地方需要轉換,並且每次使用每次都要進行轉換,有沒有一種機制,把表單中的字串拿過來自動轉換為相應的型別呢?不需要我們再進行手動轉換呢?
基於上述的不便,轉向不靈活,表單中的字串每次都要進行轉換等一系列的原因,
在上述問題中,闡述了struts對錶單的封裝,在web應用程式開發過程中,開發人員需要大量的時間來處理表單問題,有的時候是通過表單提交一些新的問題,有的是通過表單修改資料,所有這些表單在處的處理在傳統web開發中是非常複雜的。本篇重點說說struts中的表單處理器ActionForm。
ActionForm
問題的提出
在傳統的web應用程式開發中,繁雜的表單處理給開發工作人員帶來了巨大的困難,在傳統的開發語言中,沒有組建可以自動收集使用者輸入的表單內容,開發人員不得不在程式中手動提取表單的值。例如在表單中有這樣的一個文字輸入域:
問題的解決
在Struts中就是使用ActionForm來解決這個問題,對於每一個使用者的表單,需要提供一個ActionForm,這個ActionForm自動把客戶提交的表單儲存在這個ActionForm中,然後把這個ActionForm傳遞給Action,從而在Action中可以通過這個ActionForm取出使用者資訊,然後根據這些資訊完成對應的業務邏輯處理。
例如在Struts中用struts的html標籤表述成下述形式:
<html:text property=”password”/>
在這種情況下表單提交後,struts框架會自動把表單中的這個輸入項賦值到ActionForm中的password屬性中,從而把表單中的內容儲存在ActionForm中,整個過程由struts自動完成,不需要開發人員干涉。我們在建立ActionForm時要遵循以下規範:
(1)每個ActionForm都要繼承org.apache.struts.action.ActionForm類,而且需要為每一個表單提供一個ActionForm。
(2)ActionForm中每個屬性要與表單中的輸入項一一對應。
(3)AcitonForm每個屬性都要提供的getter方法和setter方法。Struts框架就是通過這些方法來儲存表單的值,然後在Action中通過這些方法取得表單的值。
(4)如果表單需要驗證,就需要在ActionForm中提供validate方法,這個方法中提供對錶單的具體驗證邏輯。這個方法不僅實現了資料驗證同時實現了資料緩衝的作用,在validate方法中驗證使用者提交表單的有效性,當表單驗證失敗時會自動返回使用者輸入頁面,這時候使用者輸入的值都儲存在ActionForm中,返回頁面時struts框架會取出AcitonForm中的資料並輸出到對應的使用者輸入項中,保證了使用者開始輸入的表單資訊。
問題的提出
以上所說的是靜態ActionForm,當我們為每個表單都建立一個AcitonForm的時候,會導致ActionForm數量過多。每個ActionForm過強的聚合性也會使程式碼難以維護和重用。怎麼樣不用去建立過多的ActionForm?而且當提交表單的屬性名字相同時,不用再重複建立AcitonForm(例如登入和註冊)?
問題的解決
Struts中可以使用動態ActionForm來解決上述問題。動態ActionForm不需要建立自己的ActionForm,需要在建立自己Action的時候直接把execute方法中傳遞過來的form物件轉化為DynaActionForm。
我們需要更改struts-config.xml中form-beans配置:
<form-beans>
<form-bean name="dynaForm" type="org.apache.struts.action.DynaActionForm">
<form-property name="username" type="java.lang.String" />
<form-property name="age" type="java.lang.Integer"/>
</form-bean>
</form-beans>
Action中使用get方法取得表單中的值。
/**
* 測試動態ActionForm.
* @author summer
*
*/
public classDynaActionFormTestAction extends Action {
@Override
publicActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequestrequest, HttpServletResponse response)
throwsException {
DynaActionFormdaf = (DynaActionForm)form;
//取出map中key值為name,value為類名.
Stringusername = (String)daf.get("username");
Integerage = (Integer)daf.get("age");
System.out.println("username"+username);
System.out.println("username"+age);
returnmapping.findForward("success");
}
}
靜態ActionForm方式,使用get/set方法,而動態ActionForm方式,使用map的getkey方式,其中key就是標籤name的值。
使用動態ActionForm優點:若更改表單和ActionForm時不需要重新編譯,而靜態的需要更改靜態的ActionForm.java檔案,必須重新編譯。缺點:靜態返回的是對應的值,動態ActionForm返回的是物件,我們還要把這個物件進行強制轉換。
相關推薦
Struts旅程(三)Struts表單處理器ActionForm(靜態動態)
上篇我們以登入為例講解了struts配置,實現了使用struts框架進行登入的示例。一些名詞已經在腦海中飄蕩了。 ActionServlet:struts的控制器,負責擷取URL或分發。提供Model(模型層)和View(檢視層)使用,因此可將它看作是模型和檢視之間的中介。 ActionForm:用於封
Django框架(十五:表單中圖片的上傳)
圖片的上傳,就是後臺獲取表單傳過來的圖片並儲存。需要實現兩部分,一部分是將圖片的路徑儲存到資料庫,另一部分是把圖片檔案上傳到後臺。 下面來執行具體的操作: 由於上傳圖片時預設儲存在根目錄下的,所以需在settings.py檔案中配置圖片上傳的路徑 定義一個M
ASP.NET MVC5(三):表單和HTML輔助方法
http get 暴露 sta 選擇 .text 響應 pos 多行文本 二進制 表單的使用 Action和Method特性 Action特性用以告知瀏覽器信息發往何處,因此,Action特性後面需要包含一個Url地址。這裏的Url地址可以是相對的,也可以是絕對的。如
網頁開發學習(三):表單
表單是網頁中提供的一種互動式操作手段,無論是提交搜尋的資訊,還是網上註冊等都需要使用表單。使用者可以通過提交表單資訊與伺服器進行動態交流。表單主要可以分為兩部分:一是HTML原始碼描述的表單;二是提交後的表單處理,需要使用伺服器端編寫好 JSP等程式碼對客戶端提交的資訊作出迴應。
js小練習(三):表單操作
(一)主要功能: (1)限制使用者名稱和密碼的格式: 包括限制長度,只能是數字和字母,不能為空等等,這部分主要通過正則表示式和onblur事件來篩選判斷。 (2)兩次密碼的驗證: 判斷兩次的value值是否一致,同樣是使用到了onblur事件。 (3)單選框:
【應用篇】Activiti外接表單簡單應用(三)
Activiti的簡單應用,使用外接表單的方式將業務頁面繫結到工作流的結點上,當執行到當前結點時,打印出繫結表單的內容。新建4個form頁面,頁面內容隨便寫些內容即可:按照下圖的方式依次繫結:流程變數設定如圖,其他的類似:對應生成的xml:<?xml version="
jQuery基礎(常用插件 表單驗證,圖片放大鏡,自定義對象級,jQuery UI,面板折疊)
此外 cookie值 添加圖標 tor 列表 需要 droppable 使用 ddn 1.表單驗證插件——validate 該插件自帶包含必填、數字、URL在內容的驗證規則,即時顯示異常信息,此外,還允許自定義驗證規則,插件調用方法如下: $(form).vali
selenium測試(Java)--多表單切換(十二)
generate ati nqa void char support 編寫 generated key 采用下面的例子來編寫用例 <!DOCTYPE html> <html> <head> <meta http-equiv="co
Spring MVC-表單(Form)標簽-單選按鈕(RadioButton)示例(轉載實踐)
springmvc tro void cnblogs subscribe bin 應用 mat efi 以下內容翻譯自:https://www.tutorialspoint.com/springmvc/springmvc_radiobutton.htm 說明:示例基於Sp
JavaScript學習日誌(七):表單腳本
prev 調用 don 表單 rip 如果 html image 集合 一,基礎知識 1,取得<form>元素引用的方式,常用的是通過id,其次可以通過document.forms可以取得頁面中所有的表單,在這個集合中,可以通過數值索引或name值來取得特定的表
Python Tornado初學筆記之表單與模板(一)
too pan ade pin 只需要 過濾 擴展 python代碼 squeeze Tornado中的表單和HTML5中的表單具有相同的用途,同樣是用於內容的填寫。只是不同的是Tornado中的表單需要傳入到後臺,然後通過後臺進行對模板填充。
(轉)html 表單提交時,無法獲取到disabled屬性的input值
有效 AS 單元 java check bsp ado 控件 下拉框 input的字段當為disabled是,無法獲取值,無法改變值,所以在表單提交時,獲取不到值。可以用randomly解決這個問題。 <input name="country" id="countr
三大框架(ssh)學習——表單資料封裝
Model-Driven和Property-Driven Struts1中我們可以將提交表單的引數使用FormBean進行封裝傳遞給我們的Action。在struts2中我們可以使用Model-Driven和Property-Driven進行表單資料的封裝,便於我們在Action中直接使用。
更改表單顯示狀態(miniUI)
<div field="status" headerAlign="center" allowSort="true" renderer="onCurrentStateRenderer"> 申請狀態 </div> //js程式碼
獲得元素html內容 及 表單元素狀態(即使用者輸入或者選中的內容)
//獲得元素html內容.如果process為true時,獲得html及表單元素狀態(即使用者輸入或者選中的內容) function getHtml(selecter,process) { var ele = $(selecter); if (window.A
後臺表單校驗(JSR303)
轉載自:https://www.ibm.com/developerworks/cn/java/j-lo-jsr303/ JSR 303 - Bean Validation 介紹及最佳實踐 安 大鵬, 楊 樂, 和 翁 志弘 2011 年 5 月 24 日釋出
JavaScript進階(四)form表單校驗
前言 本章將學習表單的校驗,作為一個前面學習的總結! 方法 1.概念 我們知道,在學習HTML的時候,我們做了一個非常醜陋的表單,裡面有文字框、單選鈕、複選框等一系列表單元素。這些都是隨便填寫的,沒有加任何的校驗。也就是說正常情況下我們需
微信小程式六(資料請求 表單的建立 提交 與接收)
好了 開始正題了,本節小小研究了下 微信小程式的表單建立與提交 先看看效果 1. 表單頁面 <view id="adduser"> <form bindsubmit="formSubmit" bindreset="formReset"> &
C# 新增Excel表單控制元件(Form Controls)
在Excel中,新增的控制元件可以和單元格關聯,我們可以操作控制元件來修改單元格的內容,在下面的文章中,將介紹在Excel中新增幾種不同的表單控制元件的方法,包括: 新增文字框(Textbox) 單選按鈕(Radio button) 複選框(Checkbox
angularJs 表單校驗 (手機號,使用者名稱,密碼等)
<!DOCTYPE html> <html ng-app="angularFormCheckModule"> <head> <meta charset="UTF-8">