在沒有使用Struts2的時候可以使用el來進行url傳參。而在Struts2中不推薦使用el(其實在Struts2.0.0.11之後就不再支持el)而推薦使用功能更爲強大的ognl表達式語言。那麼怎麼使用ognl實現url傳參?
<s:url>就是解決這一問題的標籤
<s:url>標籤一般和超鏈接 <a>一起使用,用於帶多個參數。
- <a href="
- <s:url action="">
- <s:param name=" " value=""></s:param>
- <s:param name=" " value=""></s:param>
- <s:param name=" " value=""></s:param>
- </s:url>"
- >測試連接</a>
<s:url>生成一個url地址,可以通過url標籤制定的<s:param>子元素向URL地址發送請求參數
- <s:url action=""> 指定請求地址
- <s:param name="" value=""></s:param> 指定參數
- </s:url>
例子:
- <!--action是action的名字,爲url添加參數使用param標籤-->
- <s:url var="url" action="mainPage">
- <s:param name="id" value="123"/>
- </s:url>
- <!--使用上面定義的url-->
- <s:a href="%{url}">測試連接</s:a>
- 該方法在生成的頁面源碼中生成如下代碼
- <a href="/NetBookShop_081029/mainPage?id=123">測試連接</a>
includeParams屬性
- <!--最重要的屬性includeParams,該屬性有三個值:none get all,默認值爲get-->
- <!--屬性值爲get時,該url會將訪問其所在jsp的的請求的所有get方法的參數添加到自身來-->
- <!--屬性值爲all時更是將get和post的的參數值全部添加到自身來-->
- <!--一般我們並不需要額外的參數,所以定義爲none-->
- <s:url var="url" action="mainPage" includeParams="none">
- <s:param name="id" value="123"/>
- </s:url>
includeContext屬性
- <!--includeContext:有true和false兩個值。url中是否包含上下文,也就是在url中的項目名-->
- <!--這個一般不用改,讓它自動包含,否則會定位到服務器的根目錄下-->
- <s:url var="url" action="mainPage" includeContext="false">
- <s:param name="id" value="123"/>
- </s:url>
- 生成的url就下面的樣子了,注意在普通的html中使用/會定位到服務器的根目錄,而在struts的標籤裏使用/會自動添加上下文,所以不用麻煩的指定項目名
- <a href="/mainPage?id=123">url</a>
Method屬性
- <!--method用於指定執行action的方法 這個等同於action="mainPage!ok"-->
- <s:url var="url" action="mainPage" method="ok">
- <s:param name="id" value="123"/>
- </s:url>
namespace屬性
- <!--指定命名空間後,生成的url會使用相對路徑,具體的看我的結果-->
- <s:url var="url" action="mainPage" namespace="user">
- <s:param name="id" value="123"/>
- </s:url>
- 結果如下
- lt;a href="user/mainPage?id=123">url</a>