Posted on 2007-04-27 17:27
kook 閱讀(721)
評論(0) 編輯 收藏 所屬分類:
J2EE
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事件:
onsubmit="return validateUserForm(this)"
在userForm表單的提交和取消按鈕中包含了onclick="bCancel=false"事件。bCancel是Validator定義的是否進行驗證的變量。當用戶點擊刪除或取消按鈕時,表單無須驗證,此時bCancel= true