posts - 5, comments - 24, trackbacks - 0, articles - 20
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          AppFuse學(xué)習(xí)筆記-視圖層 6

          Posted on 2007-04-27 17:27 kook 閱讀(723) 評論(0)  編輯  收藏 所屬分類: J2EE

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

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

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

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

                            <arg0 key="userForm.username"/>
                        </field>
              ……………………………
              </form>
              該配置通過depends="required"定義了userForm的username字段即用戶名是必填項。
              <arg0 key="userForm.username"/>聲明了該字段所對應(yīng)的文本在Resource Bundle中的Key。Validator會在Resource Bundle中尋找errors.required對應(yīng)的文本:'{0}' 為必填項,將userForm.username對應(yīng)的文本帶入{0}。如用戶沒有填寫該項,Validator會提示“'用戶名' 為必填項”的消息。
              validation.xml中使用正則表達式定義了一些簡單的全局的規(guī)則,如電話號碼的格式等。
              默認情況下,Validator框架在Web服務(wù)器端執(zhí)行表單驗證。validator-rules.xml里已經(jīng)定義了客戶端JavaScript的生成規(guī)則,可以在JSP網(wǎng)頁中生成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事件:
              onsubmit="return validateUserForm(this)"
              在userForm表單的提交和取消按鈕中包含了onclick="bCancel=false"事件。bCancel是Validator定義的是否進行驗證的變量。當(dāng)用戶點擊刪除或取消按鈕時,表單無須驗證,此時bCancel= true

          主站蜘蛛池模板: 晋宁县| 威信县| 龙口市| 永州市| 孟州市| 吴川市| 石门县| 新郑市| 西平县| 嵊泗县| 炉霍县| 荥阳市| 城步| 宜春市| 河西区| 昌都县| 克东县| 紫云| 济南市| 平遥县| 松滋市| 凤山市| 长治市| 南昌县| 施甸县| 河北区| 扎赉特旗| 梁平县| 遂宁市| 拉萨市| 榆中县| 浪卡子县| 迁西县| 安溪县| 明溪县| 福清市| 乌兰察布市| 巢湖市| 迁西县| 盐亭县| 金坛市|