1. 程式人生 > >Struts旅程(三)Struts表單處理器ActionForm(靜態動態)

Struts旅程(三)Struts表單處理器ActionForm(靜態動態)

上篇我們以登入為例講解了struts配置,實現了使用struts框架進行登入的示例。一些名詞已經在腦海中飄蕩了。

ActionServletstruts的控制器,負責擷取URL或分發。提供Model(模型層)View(檢視層)使用,因此可將它看作是模型和檢視之間的中介。

ActionForm:用於封裝使用者的請求引數,而請求引數是通過JSP頁面的表單域傳遞過來的。

Action:使用者請求和和業務邏輯的橋樑,每個Action作為業務邏輯的代理,可以呼叫業務邏輯。

一些問題是有必要再次提起的。

使用基本的MVC和使用struts框架區別,使用struts好處在哪裡?

我們知道我們不適用框架的時候,在

MVC中典型的控制器是servletservlet可以獲取引數和邏輯模型的呼叫和轉向功能。而struts對它做了封裝,為什麼要進行封裝?當我們請求到一個servlet,我們在這個servlet中取得引數、呼叫業務邏輯、轉向,我們在servlet中寫死了轉向頁面,當我們想要換一個轉向頁面的時候就需要改動程式碼了,改動程式碼後還要重新進行編譯。

而且從表單中傳遞過來的資料全是字串形式,我們還需要根據實際的需求把字串轉換為我們需要的型別,如果很多地方需要轉換,並且每次使用每次都要進行轉換,有沒有一種機制,把表單中的字串拿過來自動轉換為相應的型別呢?不需要我們再進行手動轉換呢?

基於上述的不便,轉向不靈活,表單中的字串每次都要進行轉換等一系列的原因,

struts把這些做了封裝。提取出重複的操作,轉向資訊放到了配置檔案中,這樣更加靈活了。

在上述問題中,闡述了struts對錶單的封裝,在web應用程式開發過程中,開發人員需要大量的時間來處理表單問題,有的時候是通過表單提交一些新的問題,有的是通過表單修改資料,所有這些表單在處的處理在傳統web開發中是非常複雜的。本篇重點說說struts中的表單處理器ActionForm

ActionForm

問題的提出

在傳統的web應用程式開發中,繁雜的表單處理給開發工作人員帶來了巨大的困難,在傳統的開發語言中,沒有組建可以自動收集使用者輸入的表單內容,開發人員不得不在程式中手動提取表單的值。例如在表單中有這樣的一個文字輸入域:

<inputtype=”text” name=”password”> 要在程式中取得這個文字輸入域的值,只能用這樣的方法:request.getParameter(“password”);這樣的處理方法在表單比較小的時候是可以使用的,但是當表單輸入項較多的時候就不得不大量重複類似上面的處理。

問題的解決

Struts中就是使用ActionForm來解決這個問題,對於每一個使用者的表單,需要提供一個ActionForm,這個ActionForm自動把客戶提交的表單儲存在這個ActionForm中,然後把這個ActionForm傳遞給Action,從而在Action中可以通過這個ActionForm取出使用者資訊,然後根據這些資訊完成對應的業務邏輯處理。

例如在Struts中用strutshtml標籤表述成下述形式:

<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.xmlform-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方式,使用mapgetkey方式,其中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">