AppFuse學(xué)習(xí)筆記-視圖層
1. 程序描述
視圖層主要由JSP網(wǎng)頁(yè)構(gòu)成,此外還包括Resource Bundle資源文件及ActionForm Bean、Validation等,這些組件提供對(duì)國(guó)際化、接收用戶輸入的表單數(shù)據(jù)、表單驗(yàn)證和錯(cuò)誤處理等的支持。
與User的視圖層有關(guān)的文件有:
userList.jsp:用戶列表頁(yè)面,用于具有管理權(quán)限的用戶對(duì)其他用戶的管理。
userForm.jsp:用戶信息頁(yè)面,用于對(duì)用戶信息的增、刪、改
UserForm.java:與用戶信息表單對(duì)應(yīng)的ActionForm Bean
validation.xml:對(duì)用戶信息表單進(jìn)行驗(yàn)證的配置文件
Resource Bundle資源文件,中文的就是ApplicationResource_Zh_cn.properties
default.jsp:用于復(fù)合網(wǎng)頁(yè)的sitemesh文件
JavaScript、CSS文件
2. JSP頁(yè)面
與用戶相關(guān)的JSP頁(yè)面包括用戶列表和用戶信息。head及foot等通用信息放置在head.jsp、foot.jsp中,因此userList.jsp及userForm.jsp只包含與業(yè)務(wù)相關(guān)的標(biāo)簽。下面介紹主要的標(biāo)簽功能:
<logic:messagesPresent>:判斷指定的消息是否存在。若指定message屬性為true,則從request范圍內(nèi)
檢索屬性key為Globals.MESSAGE_KEY的ActionMessages對(duì)象。若不指定屬性,則默認(rèn)檢索屬性key為
Globals.ERROR_KEY的ActionMessages對(duì)象。在本系統(tǒng)中一個(gè)檢索Success消息,一個(gè)檢索Error消息。
<fmt:message>:JSTL標(biāo)簽。用于輸出Resource Bundle中的一條消息。
<bean:struts>:用于檢索Struts框架內(nèi)在的對(duì)象,如ActionFormBean、ActionForward、
ActionMapping。在這里用于在JSP頁(yè)面上定義一個(gè)ActionForward
變量以方便其它地方的引用。forward為struts-config.xml中定義的global-forward。
<c:set>:JSTL標(biāo)簽。用于定義一個(gè)變量,以方便其它地方的引用。
<c:out>:JSTL標(biāo)簽。用于在頁(yè)面上顯示一個(gè)EL表達(dá)式的值,如顯示<c:set>定義的變量。EL是JSTL采用的簡(jiǎn)單的表達(dá)式語(yǔ)言,該語(yǔ)言提供一個(gè)訪問(wèn)和操作應(yīng)用程序數(shù)據(jù)的簡(jiǎn)單方式。
<c:if><c:when><c:forEach><c:choose>:JSTL標(biāo)簽。用于處理?xiàng)l件的標(biāo)記,根據(jù)特定的邏輯條件來(lái)控制輸出網(wǎng)頁(yè)內(nèi)容,或者循環(huán)遍歷集合中的所有元素。
<display>:Display Tag的標(biāo)簽,用于顯示控制層返回的List。可以方便的定制表格是否分頁(yè)、對(duì)列排序、導(dǎo)出數(shù)據(jù)等。
<html:form>:用來(lái)定義HTML表單。Struts的HTML標(biāo)簽可以和標(biāo)準(zhǔn)的HTML元素完成相同的功能,Struts框架能夠把表單中的數(shù)據(jù)自動(dòng)映射到相應(yīng)的ActionForm Bean中。
<html:text><html:password><html:hidden>:在表單上生成相應(yīng)的HTML元素。
<html:submit><html:cancel>:在表單上生成提交按鈕和取消按鈕。當(dāng)用戶按下按鈕時(shí),將產(chǎn)生一個(gè)提交事
件或取消事件,由Action類捕獲。本系統(tǒng)中<html:submit><html:cancel>的屬性相同(均為
method),用戶按下提交按鈕或取消按鈕后執(zhí)行哪個(gè)方法由lookupMethods.properties決定。
<html-el:multibox>:在表單上生成HTML的CheckBox標(biāo)簽。html-el使用了JSTL擴(kuò)展,可以使用EL表達(dá)式。
<html:messages><html:errors>:用于在網(wǎng)頁(yè)中輸出消息。<html:errors>用
于輸出錯(cuò)誤消息,本系統(tǒng)中用于顯示表單中字段級(jí)的錯(cuò)誤信息,<html:messages>顯示全局的消息。
自定義標(biāo)簽:
在你最初運(yùn)行ant new時(shí),AppFuse就會(huì)根據(jù)你鍵入的項(xiàng)目名自動(dòng)生成一個(gè)標(biāo)簽文件,在userForm.jsp中你會(huì)看到這個(gè)標(biāo)簽。
<YOURAPPNAME:label>:它用于顯示表單輸入域前的提示文本,對(duì)文本添加了一些特別的樣式,如在必填項(xiàng)前自動(dòng)加"*"號(hào)等。
<YOURAPPNAME:country>:userForm中有設(shè)置國(guó)家一項(xiàng),該標(biāo)簽用于顯示國(guó)家的下拉列表。
<YOURAPPNAME:constants>:用于在頁(yè)面上顯示常量類org.appfuse.Constants中的常量的值。
3. ActionForm Bean
ActionForm
Bean是Struts提供的表單數(shù)據(jù)傳輸對(duì)象,用于在視圖層和控制層之間傳遞HTML表單數(shù)據(jù)。控制層可以從ActionForm
Bean中讀取用戶輸入的表單數(shù)據(jù),也可以把來(lái)自模型層的數(shù)據(jù)存放到ActionForm Bean中,然后把它返回給視圖。
User表單的ActionForm
Bean為UserForm。UserForm繼承BaseForm。BaseForm是ActionForm的子類對(duì)象,擴(kuò)展了三個(gè)通用方法:
toString()、equals(Object o)
和hashCode()。并定義了一個(gè)驗(yàn)證,用于允許用戶在點(diǎn)擊"刪除"或"取消"按鈕時(shí)表單無(wú)須驗(yàn)證。
UserForm中定義了與用戶信息表單中的字段對(duì)應(yīng)的屬性。
4. Validator驗(yàn)證框架
Validator驗(yàn)證框架負(fù)責(zé)數(shù)據(jù)驗(yàn)證,采用基于XML的配置文件來(lái)配置驗(yàn)證規(guī)則。其相關(guān)的文件有:
validation.xml:針對(duì)具體的Struts表單,為ActionForm配置所需的驗(yàn)證規(guī)則。
validator-rules.xml:框架自帶文件,包含了一組通用的驗(yàn)證規(guī)則。
validator-rules-custom.xml:自定義驗(yàn)證規(guī)則。本系統(tǒng)中定義了驗(yàn)證兩個(gè)指定的輸入域值是否相等的規(guī)則。用于驗(yàn)證密碼和確認(rèn)密碼
是否相等。其實(shí)將這個(gè)方法稍微修改一下,把“=”變?yōu)?#8220;<、>”就可以驗(yàn)證一個(gè)域不能大于/小于另外一個(gè)域,非常的實(shí)用。
Resource Bundle:定義驗(yàn)證失敗時(shí)顯示的提示文本。Resource Bundle 中以errors為前綴的Key絕大部分用于Validator的錯(cuò)誤提示。
下面是在validation.xml 中配置的userForm驗(yàn)證規(guī)則
<form name="userForm">
<field property="username"
depends="required">
<arg0 key="userForm.username"/>
</field>
……………………………
</form>
該配置通過(guò)depends="required"定義了userForm的username字段即用戶名是必填項(xiàng)。
<arg0 key="userForm.username"/>聲明了該字段所對(duì)應(yīng)的文本在Resource
Bundle中的Key。Validator會(huì)在Resource Bundle中尋找errors.required對(duì)應(yīng)的文本:'{0}'
為必填項(xiàng),將userForm.username對(duì)應(yīng)的文本帶入{0}。如用戶沒(méi)有填寫(xiě)該項(xiàng),Validator會(huì)提示“'用戶名' 為必填項(xiàng)”的消息。
validation.xml中使用正則表達(dá)式定義了一些簡(jiǎn)單的全局的規(guī)則,如電話號(hào)碼的格式等。
默認(rèn)情況下,Validator框架在Web服務(wù)器端執(zhí)行表單驗(yàn)證。validator-rules.xml里已經(jīng)定義了客戶端JavaScript的生成規(guī)則,可以在JSP網(wǎng)頁(yè)中生成JavaScript腳本。需要進(jìn)行客戶端驗(yàn)證時(shí),在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定義的是否進(jìn)行驗(yàn)證的變量。當(dāng)用戶點(diǎn)擊刪除或取消按鈕時(shí),表單無(wú)須驗(yàn)證,此時(shí)bCancel= true。
posted on 2007-06-18 18:11 chenguo 閱讀(210) 評(píng)論(0) 編輯 收藏 所屬分類: J2ee Dev