<html:link> 標(biāo)簽用于生成HTML <a> 元素。<html:link> 在創(chuàng)建超鏈接時(shí),有兩個(gè)優(yōu)點(diǎn):
(1) 允許在URL 中以多種方式包含請(qǐng)求參數(shù)。
(2) 當(dāng)用戶瀏覽器關(guān)閉Cookie 時(shí),會(huì)自動(dòng)重寫(xiě)URL,把SessionID 作為請(qǐng)求參數(shù)包含在URL 中,用于跟蹤用戶的Session 狀態(tài)。
<html:link> 標(biāo)簽有以下重要屬性:
(1) forward:指定全局轉(zhuǎn)發(fā)鏈接。
(2) href:指定完整的URL 鍵接。
(3) page:指定相對(duì)于當(dāng)前網(wǎng)頁(yè)的URL。
<html:rewrite> 用于輸出超鏈接中的URI部分,但它并不生成HTML <a> 元素。URI指的是URL 中協(xié)議、主機(jī)和端口以后的內(nèi)容。URI 用于指定具體的請(qǐng)求資源。例如,對(duì)于URL:HTTP://localhost:8080/HtmlBasic.do,它的URI為/HtmlBasic.do
示例:
1、創(chuàng)建全局轉(zhuǎn)發(fā)鏈接
首先,在Struts-config.xml 中<global-forwards> 元素中定義一個(gè)<forward> 元素:
<global-forwards>
<forward name = "index" path="/index.jsp"/>
</global-forwards>
接著,在JSP 文件中創(chuàng)建<html:link> 標(biāo)簽:
<html:link forward="index">
Link to Global ActionForward
</html:link>
<html:link> 標(biāo)簽的forward 屬性和<global-forwards> 元素中的<forward> 子元素匹配。以上代碼生成如下HTML 內(nèi)容:
<a href="/index.jsp">Link to Global ActionFoward</a>
值得注意的是,<html:link> 的forward 屬性只引用Struts-config.xml 配置文件中<global-forwards>內(nèi)的<forward> 子元素,如果引用<action> 內(nèi)的<forward> 子元素,在運(yùn)行時(shí)將會(huì)拋出異常:
Cannot create rewrite URL: Java.Net.MalfomedURlException: Cannot retrieve ActionForward
2、創(chuàng)建具有完整URL 的鏈接
如果Web 應(yīng)用需要鏈接到其他站點(diǎn),應(yīng)該給出其他站點(diǎn)完整URL,例如:
<html:link >
Generate an "href" directly
</html:link>
生成HTML 代碼如下:
<a >Generate an "href" directly</a>
值得注意的是,如果指定了<html:link> 標(biāo)簽的href 屬性,即使用戶瀏覽器的Cookie 關(guān)閉,<html:link> 標(biāo)簽也不會(huì)把用戶SessionID 作為請(qǐng)求參數(shù)加和到URL 中。
3、從當(dāng)前網(wǎng)頁(yè)中創(chuàng)建相對(duì)URL
如果從一個(gè)網(wǎng)頁(yè)鏈接到同一個(gè)應(yīng)用中的另一網(wǎng)頁(yè),可以采用以下方式:
<html:link page="/HtmlBasic.do">
A relative link from this page
</html:link>
<html:link> 標(biāo)簽的 page 屬性用于指定相對(duì)于當(dāng)前應(yīng)用的URI。以上代碼生成如下HTML 內(nèi)容:
<a href="/lib/HtmlBasic.do">......</a>
4、在URL 或 URI 中包含請(qǐng)求參數(shù)
如果要在URL或URI 中包含請(qǐng)求參數(shù),只要把請(qǐng)求參數(shù)加在URL 或 URI的末尾就可以了。例如:
<html:link page="/HtmlBasic.do?prop1=abc&prop2=123">
Hard-code the url parameters
</html:link>
<!-- or -->
<html:rewrite page="/HtmlBasic.do?prop1=abc&prop2=123"/>
以上代碼生成如下HTML 內(nèi)容:
<a href=/lib/HtmlBasic.do?prop1=abc&prop2=123">......</a>
rewrite: /HtmlBasic.do?prop1=abc&prop2=123
提示:在HTML 中& 代表特殊字符 "&"
5、在URL 或 URI 中包含單個(gè)請(qǐng)求變量
如果要在URL 中包含一個(gè)請(qǐng)求參數(shù),而這人參數(shù)的值存在于當(dāng)前網(wǎng)頁(yè)可訪問(wèn)的一個(gè)變量中,可以按以下方法來(lái)實(shí)現(xiàn)。
為了演示這一功能,首先創(chuàng)建一個(gè)當(dāng)前網(wǎng)頁(yè)可訪問(wèn)的變量。例如,本例中創(chuàng)建了兩個(gè)變量,一個(gè)是字符類型,一個(gè)是CustomerBean , 它們存存于一個(gè) page 范圍內(nèi):
<%
/*
* Create a string object to store as a bean in
* the page content and embed in this link
*/
String stringBean = "Value to Pass ont URL";
pageContext.setAttribute("stringBean", stringBean);
%>
<jsp:useBean id = "customerBean" scope="page" class="htmltaglibs.beans.CurstomerBean"/>
<jsp:setProperty name="customerBean" property="name" value="weiqin"/>
接著,把這兩個(gè)變量作為請(qǐng)求參數(shù),加入到URL或URI 中:
<html:link page="/HtmlBasic.do"
paramId="urlParamName"
paramName="stringBean">
URL encode a parameter based on a string bean value
</html:link>
<html:link page="/HtmlBasic.do"
paramId="urlParamName"
paramName="customerBean"
paramProperty="name">
URL encode a parameter based on a customer bean value
</html:link>
rewrite: <html:rewrite page="/HtmlBasic.do"
paramId="urlParamName" paramName="stringBean"/>
rewrite: <html:rewrite page="/HtmlBasic.do"
paramId="urlParamName" paramName="customerBean"
paramProperty="name"/>
<html:link> 標(biāo)簽的 paramId 屬性指定請(qǐng)求參數(shù)名,paramName 屬性指定變量的名字。如果變量為JavaBean ,用paramProperty 屬性指定JavaBean 的屬性。
對(duì)于本例的stringBean,請(qǐng)求參數(shù)值為stringBean 的字符串值。對(duì)于customerBean,指定了paramProperty 屬性,請(qǐng)求參數(shù)值為customerBean 的 name 屬性值。
以上代碼生成如下HTML 內(nèi)容:
<a href="/HtmlBasic.do?urlParamName=Value to Pass on Url">
Url encode a paramter based on a string bean value
</a>
<a href="/HtmlBasic.do?urlParamName=weiqin">
url encode a parameter based on a customer bean value
</a>
rewrite: /HtmlBasic.do?urlParamName=Value to Pass on Url
rewrite: /HtmlBasic.do?urlParamName=weiqin
6、在URL 或 URI 中包含多個(gè)請(qǐng)求變量
如果在URL 或 URI 中包含多個(gè)請(qǐng)求參數(shù),而這些參數(shù)的值來(lái)自多個(gè)變量,需要先定義一個(gè)Map類型的java 類,如java.util.HashMap,用它來(lái)存放請(qǐng)求變量。例如:
<%
/*
* Strore values int a Map(HashMap in this case)
* and construct the URL based on the Map
* /
java.util.HashMap myMap = new java.util.HashMap();
myMap.put("myString", new String("myStringValue"));
myMap.put("myArray" , new String[]{"str1","str2","str3"} );
pageContext.setAttribute("map", myMap);
%>
在以上代碼的HaspMap 中存放了兩個(gè)對(duì)象,其中第二個(gè)對(duì)象是個(gè)字符串?dāng)?shù)組。HashMap 被存放在PageContext 中。 接下來(lái)就可以把這個(gè)HashMap 作為請(qǐng)求參數(shù),加入到URL 或 URI 中:
<%-- For this version of the <html:link> tag: --%>
<%-- map = a map with name/value pairs to pass on the url --%>
<html:link page="/HtmlBasic.do" name="map">
URL encode a parameter based on value in a Map
</html:link>
<%-- Create the same rewrite string for the above link. --%>
rewrite:<html:rewrite page="/HtmlBasic.do" name="map"/>
<html:link> 標(biāo)簽的name 屬性指定包含請(qǐng)求變量的HashMap 對(duì)象。HashMap 對(duì)象中的每一對(duì)"key/value" 代表一對(duì)或多對(duì)"請(qǐng)求參數(shù)名/請(qǐng)求參數(shù)值"。以上代碼生成如下的Html 內(nèi)容:
<a href="/HtmlBasic.do?myString=myStringValue&myArray=str1&myArray=str2&myArray=str3">
URL encode a parameter based on value in a Map
</a>
rewrite:/HtmlBasic.do?myString=myStringValue&myArray=str1&myArray=str2&myArray=str3
本文來(lái)自CSDN博客,轉(zhuǎn)載請(qǐng)標(biāo)明出處:http://blog.csdn.net/dongfengpaopao666/archive/2008/01/05/2027055.aspx