Struts
提供了一個(gè)強(qiáng)大的
HTML
標(biāo)簽庫來幫助你構(gòu)建
Web
應(yīng)用程序。
為了更容易、更快速地進(jìn)行開發(fā),
Struts
提供了功能同其它
JSP
標(biāo)簽庫類似的五個(gè)標(biāo)簽庫,即:
HTML
、
Bean
、
Logic
、
Template
和
Nested
。第一部分講述如何配置一個(gè)
Struts
應(yīng)用程序來運(yùn)用這個(gè)標(biāo)簽庫,并介紹了第一組標(biāo)簽;第二部分講述了第二組標(biāo)簽;
?
HTML
標(biāo)簽庫主要用來顯示
HTML
元素,如果不用這種方法,你就必須用
HTML
標(biāo)簽來指定它們。從表面上看,這個(gè)標(biāo)簽庫很簡(jiǎn)單。但是通過深入研究,我們就會(huì)發(fā)現(xiàn)它很強(qiáng)大。例如,它可以為我們?cè)?/span>
HTML
表單的一個(gè)特定輸入元素中放置重點(diǎn)內(nèi)容生成
JavaScript
,或?yàn)榭蛻舳溯斎腧?yàn)證生成腳本。而且,你可以用它通過一行代碼來處理錯(cuò)誤。然而,在將這個(gè)標(biāo)簽庫用于你的
Struts
應(yīng)用程序前,你需要做些簡(jiǎn)單的準(zhǔn)備工作。
配置應(yīng)用程序來運(yùn)用標(biāo)簽庫
在運(yùn)用
Struts HTML
標(biāo)簽庫前,你需要通過三個(gè)步驟來配置一個(gè)
Struts
應(yīng)用程序。
1.?????
在部署描述符(
web.xml
文件)中注冊(cè)標(biāo)簽庫:
? <taglib>
??? <taglib-uri>/WEB-INF/struts-html.tld</taglib-uri>
??? <taglib-location>/WEB-INF/struts-html.tld</taglib-location>
</taglib>
上面的代碼就告訴了
servlet container
有關(guān)
Struts HTML
標(biāo)簽庫的情況,以及在哪里可以找到標(biāo)簽庫的
TLD
文件。
2.
確信將
struts-html.tld
文件復(fù)制到
WEB-INF
目錄中。你不用擔(dān)心標(biāo)簽庫類文件,因?yàn)樗鼈円呀?jīng)包含在
struts.jar
文件中了。
3.
在運(yùn)用標(biāo)簽庫的每個(gè)
JSP
頁面中,插入下面的
<taglib>
指示符:
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
另外,你也可以運(yùn)用
struts-html.tld
文件來學(xué)習(xí)它所支持的標(biāo)簽以及每個(gè)標(biāo)簽可以帶有哪些屬性。
運(yùn)用一個(gè)自定義的標(biāo)簽庫通常是很容易的:只要遵循前面講述的步驟就行了。然而,有些標(biāo)簽庫包含一些原則,這些原則使我們?cè)谶\(yùn)用這些標(biāo)簽庫時(shí)并不那么容易。
Struts HTML
標(biāo)簽庫就是其中之一。有些標(biāo)簽很簡(jiǎn)單、很容易使用;然而,另外有些標(biāo)簽則取決于
Struts
應(yīng)用程序中的其它標(biāo)簽或其它元素。
我將
HTML
標(biāo)簽庫中的標(biāo)簽大致分成了兩類:簡(jiǎn)單、容易使用的標(biāo)簽,我把它們稱為
“
獨(dú)立的標(biāo)簽
”
,第二類是必須通過一個(gè)
form
標(biāo)簽來使用的標(biāo)簽。我把第二類的標(biāo)簽簡(jiǎn)單地稱為與
form
相關(guān)的標(biāo)簽。本文主要講述獨(dú)立的標(biāo)簽,在本系列文章的
第二部分
我將講述與
form
相關(guān)的標(biāo)簽。
HTML
標(biāo)簽庫包含幾個(gè)很容易使用的獨(dú)立的標(biāo)簽。下面講述幾個(gè)比較重要的標(biāo)簽。
<html>
標(biāo)簽
<html>
標(biāo)簽是
HTML
標(biāo)簽庫中最容易的標(biāo)簽。它有兩個(gè)屬性:
locale
和
xhtml
,兩者都不是必需的。下面的代碼選自一個(gè)運(yùn)用
<html>
標(biāo)簽的
JSP
頁面:
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<html:html locale="true">
<head>
<title>Welcome</title>
</head>
<body>
Hello World!
</body>
</html:html>
注意,我們沒有用標(biāo)準(zhǔn)的
<html>
元素,而是用了
<html:html>
標(biāo)簽。其中第一個(gè)
html
指的是前綴,第二個(gè)是
<html>
標(biāo)簽本身。而且我們也用了
locale
屬性。
JSP
頁面將顯示成:
<html lang="en">
<head>
<title>Welcome</title>
</head>
<body>
Hello World!
</body>
</html>
注意,
<html:html locale=“true”>
中的
locale
屬性在生成的
HTML
頁面中被轉(zhuǎn)換成了
lang=“en”
。生成的結(jié)果取決于
Struts
應(yīng)用程序所位于的服務(wù)器的
locale
。如果你將應(yīng)用程序部署到一個(gè)不同
locale
的服務(wù)器,你不需要改變代碼。
Locale
會(huì)自動(dòng)調(diào)整。
<base>
標(biāo)簽
<base>
標(biāo)簽顯示一個(gè)
HTML
元素,用一個(gè)
href
屬性表示所包含的
JSP
頁面的絕對(duì)位置。只有當(dāng)這個(gè)標(biāo)簽是內(nèi)嵌在一個(gè)
head
標(biāo)簽部分時(shí),它才有效。例如這個(gè)
JSP
頁面:
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<html:html locale="true">
<head>
<title>Welcome</title>
<html:base/>
</head>
<body>
Hello World!
</body>
</html:html>
會(huì)轉(zhuǎn)換成以下形式:
<html lang="en">
<head>
<title>Welcome</title>
<base >
</head>
<body>
Hello World!
</body>
</html>
<img>
標(biāo)簽
<img>
標(biāo)簽用來生成一個(gè)
HTML <IMG>
標(biāo)簽。它最重要的屬性有:
·page
:圖象文件相對(duì)于模塊的路徑;前面必須帶有一個(gè)斜線
·height
:圖象的高度
·width
:圖象的寬度
·alt
:如果找不到圖象,顯示的文本
?
?
?
例如:
<html:img page="/logo.gif" height="50" width="200" alt="Company Logo"/>
會(huì)轉(zhuǎn)換成:
<img src="/myStrutsApp/logo.gif" height="50" width="200" alt="Company Logo">
<link>
標(biāo)簽
<link>
標(biāo)簽會(huì)生成一個(gè)超鏈接。例如標(biāo)簽:
<html:link page="/index.html">Click here</html:link>
會(huì)轉(zhuǎn)換成:
<a href="/myStrutsApp6/index.html">Click here</a>
<errors>
標(biāo)簽
<errors>
標(biāo)簽的易于使用性通常會(huì)掩蓋其真正的強(qiáng)大功能。通過一個(gè)簡(jiǎn)單的
<html:errors/>
標(biāo)簽,你就可以在一個(gè)
JSP
頁面上顯示完全自定義的錯(cuò)誤信息。
這個(gè)標(biāo)簽檢查
Request
對(duì)象的屬性集合來查找一個(gè)
reserved key
。如果它找到一個(gè)
reserved key
,它就假設(shè)這個(gè)
key
是一個(gè)
String
、或是一個(gè)
String
數(shù)組(它包含在模塊的
MessageResources
中查找的
message keys
)、或是類型為
org.apache.struts.action.ActionErrors
的一個(gè)對(duì)象。
如果在應(yīng)用程序資源中存在相應(yīng)的信息,那么就可以用下面這些可選的
message keys
:
· errors.header
:相應(yīng)的信息在錯(cuò)誤信息的單獨(dú)列表前顯示
· errors.footer
:相應(yīng)的信息在錯(cuò)誤信息的單獨(dú)列表后顯示
· errors.prefix
:相應(yīng)的信息在錯(cuò)誤信息的單獨(dú)列表前顯示
· errors.suffix
:相應(yīng)的信息在錯(cuò)誤信息的單獨(dú)列表后顯示
?
?
?
?Struts HTML
標(biāo)簽庫會(huì)使開發(fā)更容易、更快速。為了有效地運(yùn)用這個(gè)標(biāo)簽庫,你需要對(duì)標(biāo)簽庫中的標(biāo)簽很熟悉。在本系列文章的第一部分中,你學(xué)習(xí)了如何配置一個(gè)
Struts
應(yīng)用程序來運(yùn)用標(biāo)簽庫,并對(duì)獨(dú)立的標(biāo)簽有了總體的了解。
在下面第二部分中,你將學(xué)習(xí)與
form
相關(guān)的標(biāo)簽,講述了如何使用
Struts
提供的
form
相關(guān)的標(biāo)簽。
與
form
相關(guān)的標(biāo)簽包括
<form>
標(biāo)簽本身以及所有必須包含在其中的標(biāo)簽。比如,
<text>
和
<password>
標(biāo)簽就是和
form
相關(guān)的標(biāo)簽,因?yàn)槿绻话阉鼈兎诺揭粋€(gè)
form
中它們就沒有意義。
<form>
標(biāo)簽
<form>
標(biāo)簽用于生成一個(gè)
HTML form
。使用該標(biāo)簽時(shí)必須遵循許多規(guī)則。
首先要遵循的規(guī)則是
,
<form>
標(biāo)簽中必須包含一個(gè)
action
屬性,它是這個(gè)標(biāo)簽中唯一必需的屬性。如果不具備該屬性則
JSP
頁面會(huì)拋出一個(gè)異常。之后你必須給這個(gè)
action
屬性指定一個(gè)有效值。一個(gè)有效值是指應(yīng)用程序的
Struts
配置文件中
<action-mappings>
元素里的任何一個(gè)
<action>
子元素的訪問路徑。而且相應(yīng)的
<action>
元素中必須有一個(gè)
name
屬性,它的值是
form bean
的名稱。
例如,如果你有這樣一個(gè)
<form>
標(biāo)簽:
?? <html:form action="/login" >
那么你的
Struts
配置文件的
<action-mappings>
元素中必須有一個(gè)如下顯示為粗體的
<action>
元素:
<action-mappings>
???? <action path="/login"
????? type="com.javapro.struts.LoginAction"?
????? name="loginForm"
????? scope="request"
????? input="/login.jsp">
????? <forward name="success" path="/mainMenu.jsp"/>
??? </action>
??? .
??? .
??? .
? </action-mappings>
?
這就是說一個(gè)
form
標(biāo)簽是和
form bean
相關(guān)聯(lián)的。
另一個(gè)要遵循的規(guī)則是:
任何包含在
<form>
中用來接收用戶輸入的標(biāo)簽(
<text>
、
<password>
、
<hidden>
、
<textarea>
、
<radio>
、
<checkbox>
、
<select>
)必須在相關(guān)的
form bean
中有一個(gè)指定的屬性值。比如,如果你有一個(gè)屬性值被指定為
“username”
的
<text>
標(biāo)簽,那么相關(guān)的
form bean
中也必須有一個(gè)名為
“username”
的屬性。輸入
<text>
標(biāo)簽中的值會(huì)被用于生成
form bean
的
userName
屬性。
除了上面所講的屬性之外,
<form>
標(biāo)簽還有一些不是必須但加上更好的
“
次要
”
的屬性
。比如,你可以用
focus
屬性來生成
JavaScript
,它會(huì)
“
定焦
”
(
focus
)到該
form
所包含的一個(gè)元素上。使用
focus
屬性時(shí)你需要給它指定元素的名稱。比如,以下代碼是定焦在第二個(gè)
Text
元素上的:
<body>
<html:form action="/login" focus="password">
User Name: <html:text property="userName"/>
<br>Password: <html:text property="password"/>
<br><html:submit/>
</html:form>
</body>
該段代碼會(huì)被轉(zhuǎn)換成:
<body>
<form name="loginForm" method="post" action="/myStrutsApp6/login.do">
User Name: <input type="text" name="userName"? value="">
<br>Password: <input type="text" name="password" value="">
<br><input type="submit" value="Submit">
</form>
<script language="JavaScript"
?? type="text/javascript">
? <!--
?if (document.forms["loginForm"].elements["password"].type != "hidden")
??? document.forms["loginForm"].elements["password"].focus()
? // -->
</script>
</body>
注意,
<form>
標(biāo)簽中
method
屬性的缺省值是
POST
。另外,有沒有看到這個(gè)標(biāo)簽庫是如何建立
JavaScript
來定焦到
password
元素上的
?
這也是該庫讓人著迷的地方之一。你不用擔(dān)心如何在客戶端進(jìn)行編程,它會(huì)幫你自動(dòng)生成。
在運(yùn)行前面的例子時(shí)還要注意,你必須有一個(gè)包含
userName
和
password
屬性的相關(guān)
form
。你可以參考本文第三部分中的
Login
程序。
<text>
標(biāo)簽
<text>
標(biāo)簽用于生成一個(gè)文本的輸入?yún)^(qū)域。它必須包含和相關(guān)
form bean
中的相同屬性對(duì)應(yīng)的
“property”
屬性。該標(biāo)簽只有在嵌入到一個(gè)
<form>
標(biāo)簽中時(shí)才有效。
例如:
<html:text property="userName"/>
會(huì)被轉(zhuǎn)換成:
<input type="text" name="userName" value="">
<password>
標(biāo)簽
<password>
標(biāo)簽用于生成一個(gè)口令字(
type password
)的輸入?yún)^(qū)域。它必須包含和相關(guān)
form bean
中的相同屬性對(duì)應(yīng)的
“property”
屬性。該標(biāo)簽只有在嵌入到一個(gè)
<form>
標(biāo)簽中時(shí)才有效。該標(biāo)簽中的一個(gè)很重要的屬性是
“redisplay”
,它用于重新顯示以前輸入到這個(gè)區(qū)域中的值。該屬性的缺省值為
true
。然而,為了使
password
不能被重新顯示,你或許希望將該屬性的值設(shè)為
false
。
例如:
<html:password property="password" redisplay="false"/>
會(huì)被轉(zhuǎn)換成
:
<input type="password" name="password" value="">
<hidden>
標(biāo)簽
<hidden>
標(biāo)簽用于生成一個(gè)隱藏文本的輸入?yún)^(qū)域。它必須包含和相關(guān)
form bean
中的相同屬性對(duì)應(yīng)的
“property”
屬性。該標(biāo)簽只有在嵌入到一個(gè)
<form>
標(biāo)簽中時(shí)才有效:
例如:
<html:hidden property="userName"/>
會(huì)被轉(zhuǎn)換成
:
<input type="hidden" name="userName" value="">
<textarea>
標(biāo)簽
<textarea>
標(biāo)簽用于生成一個(gè)文本區(qū)元素(
text area element
)。它必須包含和相關(guān)
form bean
中的相同屬性對(duì)應(yīng)的
“property”
屬性。
比如:
<html:textarea property="details" cols="80" rows="20" value="Enter details here"/>
會(huì)被轉(zhuǎn)換成:
<textarea name="details" cols="80" rows="20">Enter details here</textarea>
<radio>
標(biāo)簽
<radio>
標(biāo)簽用于顯示一個(gè)單選按鈕(
radio button
)。它必須包含
“value”
屬性。比如這段代碼:
<html:radio property="title" value="1"/>Mr.
<html:radio property="title" value="2"/>Ms.
<html:radio property="title" value="3"/>Dr.
會(huì)被轉(zhuǎn)換成這樣的
HTML
:
<input type="radio" name="title" value="1">Mr.
<input type="radio" name="title" value="2">Ms.
<input type="radio" name="title" value="3">Dr.
<checkbox>
標(biāo)簽
<checkbox>
標(biāo)簽用于顯示
checkbox
類型的輸入?yún)^(qū)域。比如:
<html:checkbox property="notify"/>Please send me notification
會(huì)被轉(zhuǎn)換成:
<input type="checkbox" name="notify" value="on">Please send me notification
<submit>
標(biāo)簽
<submit>
標(biāo)簽用于生成提交類型(
type submit
)的輸入?yún)^(qū)域。
比如:
<html:submit value="Login"/>
會(huì)被轉(zhuǎn)換成:
<input type="submit" value="Login">
?
<reset>
標(biāo)簽
<reset>
標(biāo)簽用于生成重置類型(
type reset
)的輸入?yún)^(qū)域。比如:
<html:reset/>
會(huì)被轉(zhuǎn)換成:
<input type="reset" value="Reset">
<option>
標(biāo)簽
<option>
標(biāo)簽用于顯示
select box
中的一個(gè)選項(xiàng)。參照下面的
<select>
標(biāo)簽。
<select>
標(biāo)簽
<select>
標(biāo)簽用于顯示一個(gè)包含零個(gè)或更多選項(xiàng)的
HTML
選擇元素。它必須被嵌入一個(gè)
<form>
標(biāo)簽中才有效。下面這個(gè)例子將說明如何使用該標(biāo)簽:
<html:select property="color" size="3">
? <html:option value="r">red</html:option>
? <html:option value="g">green</html:option>
? <html:option value="b">blue</html:option>
</html:select>
會(huì)被轉(zhuǎn)換成:
<select name="color" size="3"><option value="r">red</option>
? <option value="g">green</option>
? <option value="b">blue</option>
</select>
在本文系列的第二部分,你學(xué)到了一些更重要的和
form
相關(guān)的標(biāo)簽。在使用這些標(biāo)簽之前,你必須依照一些規(guī)則以便正確地運(yùn)用它們。第三部分將講述如何在真正的程序中使用這些標(biāo)簽。
?
在本文系列的第一部分中,你已經(jīng)學(xué)習(xí)了如何配置
Struts
提供的
HTML
標(biāo)簽庫以及獨(dú)立使用的標(biāo)簽;在第二部分中你學(xué)習(xí)了和
form
相關(guān)的標(biāo)簽;在第三部分中,你將學(xué)習(xí)如何在
Login
程序中使用
HTML
標(biāo)簽庫。你可以點(diǎn)此下載該程序。如果你閱讀過關(guān)于
Struts
的系列文章(包含六個(gè)部分),你會(huì)發(fā)現(xiàn)這個(gè)
Longin
程序是上次我們討論過的
Login
程序的增強(qiáng)版。
圖
1.
應(yīng)用程序目錄結(jié)構(gòu)
這個(gè)
Login
程序是一個(gè)簡(jiǎn)單的
Struts
程序,它將顯示如何使用
HTML
標(biāo)簽庫,尤其是和
form
相關(guān)的標(biāo)簽和用于錯(cuò)誤處理的標(biāo)簽。其目錄結(jié)構(gòu)如圖
1
中所示。
本文將介紹程序中每個(gè)類之間的關(guān)系以及它們所起的作用。注意,你必須自己將所有的庫文件復(fù)制到
WEB-INF/lib
目錄下;為了節(jié)省下載時(shí)間它們沒有被包含在
ZIP
文件中。
視圖
MVC
范例中有三種作為視圖的
JSP
頁面:
login.jsp
、
mainMenu.jsp
和
viewSecret.jsp
。
login.jsp
文件中包含一個(gè)用于用戶登錄的
form
,
mainMenu.jsp
中顯示了兩個(gè)鏈接(注銷(
log out
)和查看公司機(jī)密),而
viewSecret.jsp
則用來顯示一條機(jī)密消息。
這個(gè)程序的首頁面是一個(gè)
Login
頁面,它是一個(gè)包含兩個(gè)輸入框(
userName
和
password
)的
form
(見圖
2
)。用戶被要求在這兩個(gè)輸入框中輸入正確的值。登錄成功之后程序會(huì)顯示
mainMenu.jsp
頁面,它包含兩個(gè)鏈接:一個(gè)是注銷,另一個(gè)是查看公司機(jī)密賬號(hào)(見圖
3
)。
如果點(diǎn)擊了
“
注銷
”
鏈接,程序便會(huì)退出并重新顯示
Login
頁面。如果點(diǎn)擊了
“
查看機(jī)密
”
鏈接,則會(huì)顯示
viewSecret.jsp
頁面。如果注冊(cè)失敗,那么用戶會(huì)被重新引導(dǎo)到
Login
頁面以重新登錄。
如果點(diǎn)擊了
“
注銷
”
鏈接,程序便會(huì)退出并重新顯示
Login
頁面。如果點(diǎn)擊了
“
查看機(jī)密
”
鏈接,則會(huì)顯示
viewSecret.jsp
頁面。如果注冊(cè)失敗,那么用戶會(huì)被重新引導(dǎo)到
Login
頁面以重新登錄。
圖
2. Login
頁面
如果用戶輸入正確的用戶名和密碼,程序會(huì)建立一個(gè)
session
對(duì)象,并會(huì)有一個(gè)名為
loggedIn
的屬性被添加到這個(gè)
session
對(duì)象中去。只有當(dāng)程序能夠在用戶的
session
對(duì)象中查找到這個(gè)
loggedIn
屬性時(shí),用戶才可以瀏覽
Main Menu
頁面和
Secret
頁面。所有缺少該屬性或無效的
session
對(duì)象都會(huì)迫使用戶登錄。在這個(gè)程序中,正確的用戶名是
“john”
,密碼是
“123”
。這些值是程序中固定寫死的以避免需要連接到數(shù)據(jù)庫里或使用其他存儲(chǔ)來完成用戶驗(yàn)證。
當(dāng)用戶注銷時(shí),他或她的
session
對(duì)象將失效,同時(shí)
Longin
頁面會(huì)重新顯示。當(dāng)用戶點(diǎn)擊鏈接要查看公司機(jī)密時(shí),會(huì)彈出
viewSecret.jsp
頁面(見圖
4
)。
圖
3.
主頁面
配置文件
Login
程序有兩個(gè)位于
WEB-INF
目錄下的配置文件:作為部署描述符的
web.xml
文件(見列表
1
);以及作為
Struts
配置文件的
truts-config.xml
文件
(見列表
2
)。在列表
1
中,你需要特別注意
action servlet
配置中的
<init-param>
元素:
<init-param>
<param-name>application</param-name>
<param-value>com.javapro.struts.ApplicationResources
</param-value>
</init-param>
一個(gè)
<init-param>
元素代表一個(gè)初始化參數(shù),它會(huì)被包含在傳送到
action servlet
中的
ServletConfig
對(duì)象里。帶有名為
“application”
的初始化參數(shù)對(duì)
action servlet
來說具有特殊的意義:它定義了一個(gè)會(huì)被加載到缺省消息資源(
message resource
)中的屬性文件。(我將在
“
消息資源
”
部分介紹這個(gè)屬性文件)。在這個(gè)程序中,該屬性文件被用于存貯整個(gè)程序中的錯(cuò)誤消息。
部署描述符中需要注意的第二個(gè)地方是的
<taglib>
元素,它包含
<taglib-uri>
和
<taglib-location>
元素。基本上,
<taglib>
元素是用來告訴
servlet
容器如何使用一個(gè)標(biāo)簽庫的,該標(biāo)簽庫的
TLD
文件可以在
<taglib-location>
元素指定的位置找到。
圖
4.
機(jī)密頁面
注意在列表
2
中,
<form-beans>
部分包含一個(gè)名為
loginForm
的
form bean
。我在關(guān)于
Struts
系列文章的第五部分中曾介紹過
form bean
。
WEB-INF
目錄中的最后一個(gè)文件是
struts-html.tld
文件,它是
HTML
標(biāo)簽庫中的
TLD
文件。為了節(jié)省時(shí)間我將跳過對(duì)它的介紹,但你可以在
ZIP
文件中的
WEB-INF
目錄下找到它。
Form
該
form
以
com.javapro.struts.LoginForm
類的形式顯示(見列表
3
)。注意粗體的部分:它通過傳入
“error.missing.userName”
和
“error.missing.password”
字符串來舉例說明
ActionError
對(duì)象,這些字符串在消息資源中起關(guān)鍵字(
key
)的作用。
Action
類
Action
類分兩種:
LoginAction
(見列表
4
)和
LogoutAction
(見列表
5
)。另外值得一提的是如何通過消息資源中的一個(gè)關(guān)鍵字來構(gòu)建這個(gè)
ActionError
消息(在列表
4
中顯示為粗體)。
HTML
標(biāo)簽庫的使用
列表
6
、列表
7
和列表
8
中分別包含了
JSP
文件。
login.jsp
頁面(見列表
6
)中顯示了如何在
HTML
庫中使用這些標(biāo)簽(粗體部分)。我在本文系列的第一部分中介紹過這些標(biāo)簽,但通過看它如何在真正的程序中運(yùn)行,你會(huì)對(duì)它們有更深入的了解。
消息資源
如我在
“
配置文件
”
部分簡(jiǎn)要介紹的那樣,在
WEB-INF/classes/com/javapro/struts
目錄下的
ApplicationResources.properties
文件中包含配對(duì)的
key/values
,它們會(huì)被加載到缺省的消息資源中去。
HTML
標(biāo)簽庫中的
<errors>
標(biāo)簽會(huì)在該消息資源中查找到自定義的錯(cuò)誤消息。想知道它是如何出錯(cuò)的,你可以試著用一個(gè)錯(cuò)誤的用戶名或密碼來登錄,看看顯示的錯(cuò)誤消息是什么。更改錯(cuò)誤消息和編輯屬性文件一樣容易。看看如下的屬性文件:
errors.header=<b>Error(s)!!!</b><ul>
errors.footer=</ul><hr>
error.missing.userName=<li>A user name was not found.</li>
error.missing.password=<li>A password was not found.</li>
error.login.failed=<li>Incorrect user name and/or password.</li>
如果你檢查了程序的
web.xml
文件,你會(huì)看到這些對(duì)象是如何被加載的。消息資源通過將程序的參數(shù)傳入
ActionServlet
來完成加載過程。在
ActionServlet
進(jìn)行初始化時(shí),它會(huì)將
package
文件夾中的
ApplicationResources.properties
屬性解析為缺省的消息資源。如果在資源中更改一個(gè)消息并重新加載程序,它就會(huì)在整個(gè)程序中顯示。在你的
Login
程序中,這個(gè)屬性文件包含一些程序的類中所使用的錯(cuò)誤消息。
本文介紹了如何在一個(gè)簡(jiǎn)單的
Login
程序中使用
HTML
標(biāo)簽庫。它對(duì)程序進(jìn)行了詳細(xì)描述,包括視圖、配置文件、
form bean
、
action
類以及用于
JSP
頁面的代碼。
posted on 2006-04-19 16:52
★yesjoy★ 閱讀(3076)
評(píng)論(1) 編輯 收藏 所屬分類:
Structs學(xué)習(xí)