<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&amp;prop2=123">
        Hard-code the url parameters
    </html:link>
    <!-- or -->
    <html:rewrite page="/HtmlBasic.do?prop1=abc&amp;prop2=123"/>
    以上代碼生成如下HTML 內(nèi)容:
    <a href=/lib/HtmlBasic.do?prop1=abc&amp;prop2=123">......</a>
    rewrite: /HtmlBasic.do?prop1=abc&amp;prop2=123

    提示:在HTML 中&amp 代表特殊字符 "&"

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&amp;myArray=str1&amp;myArray=str2&amp;myArray=str3">
        URL encode a parameter based on value in a Map
    </a>
   
    rewrite:/HtmlBasic.do?myString=myStringValue&amp;myArray=str1&amp;myArray=str2&amp;myArray=str3

 

本文來(lái)自CSDN博客,轉(zhuǎn)載請(qǐng)標(biāo)明出處:http://blog.csdn.net/dongfengpaopao666/archive/2008/01/05/2027055.aspx