AppFuse學習筆記-視圖層

1. 程序描述
    視圖層主要由JSP網頁構成,此外還包括Resource Bundle資源文件及ActionForm Bean、Validation等,這些組件提供對國際化、接收用戶輸入的表單數據、表單驗證和錯誤處理等的支持。
    與User的視圖層有關的文件有:
    userList.jsp:用戶列表頁面,用於具有管理權限的用戶對其他用戶的管理。
    userForm.jsp:用戶信息頁面,用於對用戶信息的增、刪、改
    UserForm.java:與用戶信息表單對應的ActionForm Bean
    validation.xml:對用戶信息表單進行驗證的配置文件
    Resource Bundle資源文件,中文的就是ApplicationResource_Zh_cn.properties
    default.jsp:用於複合網頁的sitemesh文件
    JavaScript、CSS文件

2. JSP頁面
    與用戶相關的JSP頁面包括用戶列表和用戶信息。head及foot等通用信息放置在head.jsp、foot.jsp中,因此userList.jsp及userForm.jsp只包含與業務相關的標籤。下面介紹主要的標籤功能:
    <logic:messagesPresent>:判斷指定的消息是否存在。若指定message屬性爲true,則從request範圍內檢索屬性key爲Globals.MESSAGE_KEY的ActionMessages對象。若不指定屬性,則默認檢索屬性key爲Globals.ERROR_KEY的ActionMessages對象。在本系統中一個檢索Success消息,一個檢索Error消息。
    <fmt:message>:JSTL標籤。用於輸出Resource Bundle中的一條消息。
    <bean:struts>:用於檢索Struts框架內在的對象,如ActionFormBean、ActionForward、ActionMapping。在這裏用於在JSP頁面上定義一個ActionForward 變量以方便其它地方的引用。forward爲struts-config.xml中定義的global-forward。
    <c:set>:JSTL標籤。用於定義一個變量,以方便其它地方的引用。
    <c:out>:JSTL標籤。用於在頁面上顯示一個EL表達式的值,如顯示<c:set>定義的變量。EL是JSTL採用的簡單的表達式語言,該語言提供一個訪問和操作應用程序數據的簡單方式。
    <c:if><c:when><c:forEach><c:choose>:JSTL標籤。用於處理條件的標記,根據特定的邏輯條件來控制輸出網頁內容,或者循環遍歷集合中的所有元素。
    <display>:Display Tag的標籤,用於顯示控制層返回的List。可以方便的定製表格是否分頁、對列排序、導出數據等。
    <html:form>:用來定義HTML表單。Struts的HTML標籤可以和標準的HTML元素完成相同的功能,Struts框架能夠把表單中的數據自動映射到相應的ActionForm Bean中。
    <html:text><html:password><html:hidden>:在表單上生成相應的HTML元素。
    <html:submit><html:cancel>:在表單上生成提交按鈕和取消按鈕。當用戶按下按鈕時,將產生一個提交事件或取消事件,由Action類捕獲。本系統中<html:submit><html:cancel>的屬性相同(均爲method),用戶按下提交按鈕或取消按鈕後執行哪個方法由lookupMethods.properties決定。
    <html-el:multibox>:在表單上生成HTML的CheckBox標籤。html-el使用了JSTL擴展,可以使用EL表達式。
    <html:messages><html:errors>:用於在網頁中輸出消息。<html:errors>用於輸出錯誤消息,本系統中用於顯示錶單中字段級的錯誤信息,<html:messages>顯示全局的消息。
    自定義標籤:
    在你最初運行ant new時,AppFuse就會根據你鍵入的項目名自動生成一個標籤文件,在userForm.jsp中你會看到這個標籤。
    <YOURAPPNAME:label>:它用於顯示錶單輸入域前的提示文本,對文本添加了一些特別的樣式,如在必填項前自動加"*"號等。
    <YOURAPPNAME:country>:userForm中有設置國家一項,該標籤用於顯示國家的下拉列表。
    <YOURAPPNAME:constants>:用於在頁面上顯示常量類org.appfuse.Constants中的常量的值。

3. ActionForm Bean
    ActionForm Bean是Struts提供的表單數據傳輸對象,用於在視圖層和控制層之間傳遞HTML表單數據。控制層可以從ActionForm Bean中讀取用戶輸入的表單數據,也可以把來自模型層的數據存放到ActionForm Bean中,然後把它返回給視圖。
    User表單的ActionForm Bean爲UserForm。UserForm繼承BaseForm。BaseForm是ActionForm的子類對象,擴展了三個通用方法:toString()、equals(Object o) 和hashCode()。並定義了一個驗證,用於允許用戶在點擊"刪除"或"取消"按鈕時表單無須驗證。
    UserForm中定義了與用戶信息表單中的字段對應的屬性。

4. Validator驗證框架
    Validator驗證框架負責數據驗證,採用基於XML的配置文件來配置驗證規則。其相關的文件有:
    validation.xml:針對具體的Struts表單,爲ActionForm配置所需的驗證規則。
    validator-rules.xml:框架自帶文件,包含了一組通用的驗證規則。
    validator-rules-custom.xml:自定義驗證規則。本系統中定義了驗證兩個指定的輸入域值是否相等的規則。用於驗證密碼和確認密碼是否相等。其實將這個方法稍微修改一下,把“=”變爲“<、>”就可以驗證一個域不能大於/小於另外一個域,非常的實用。
    Resource Bundle:定義驗證失敗時顯示的提示文本。Resource Bundle 中以errors爲前綴的Key絕大部分用於Validator的錯誤提示。
    下面是在validation.xml 中配置的userForm驗證規則
      <form name="userForm">
              <field property="username"
                     depends="required">

                  <arg0 key="userForm.username"/>
              </field>
    ……………………………
    </form>
    該配置通過depends="required"定義了userForm的username字段即用戶名是必填項。
    <arg0 key="userForm.username"/>聲明瞭該字段所對應的文本在Resource Bundle中的Key。Validator會在Resource Bundle中尋找errors.required對應的文本:'{0}' 爲必填項,將userForm.username對應的文本帶入{0}。如用戶沒有填寫該項,Validator會提示“'用戶名' 爲必填項”的消息。
    validation.xml中使用正則表達式定義了一些簡單的全局的規則,如電話號碼的格式等。
    默認情況下,Validator框架在Web服務器端執行表單驗證。validator-rules.xml裏已經定義了客戶端JavaScript的生成規則,可以在JSP網頁中生成JavaScript腳本。需要進行客戶端驗證時,在JSP中包含:
    <html:javascript formName="userForm" cdata="false"
      dynamicJavascript="true" staticJavascript="false"/>
    <script type="text/javascript"
      src="<c:url value="/scripts/validator.jsp"/>"></script>
    並在<html:form>中定義onsubmit事件:
    οnsubmit="return validateUserForm(this)"
    在userForm表單的提交和取消按鈕中包含了οnclick="bCancel=false"事件。bCancel是Validator定義的是否進行驗證的變量。當用戶點擊刪除或取消按鈕時,表單無須驗證,此時bCancel= true。

發佈了27 篇原創文章 · 獲贊 10 · 訪問量 33萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章