Struts 2杂谈(2):如何向标签文件中的Struts 2标签传递参数值
生活随笔
收集整理的這篇文章主要介紹了
Struts 2杂谈(2):如何向标签文件中的Struts 2标签传递参数值
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
標簽文件是JSP自定義標簽中的一種,實現的方法在WEB-INF\tags目錄或子目錄中建立一個.tag文件,如table.tag,并通過taglib指令來引用.tag文件所在的目錄,代碼如下:
<%@?taglib?prefix="t"?tagdir="/WEB-INF/tags"%>
??? 如果在標簽文件中使用Struts 2標簽,就會帶來一個問題。下面先看一個例子。
??? 在WEB-INF\tags目錄中建立一個table.tag文件,代碼如下:
<%@?taglib?prefix="s"?uri="/struts-tags"%>
<%@?attribute?name="index"?type="java.lang.String"?required="true"?%>
<table?border="1"?style="font-size:25px">???
????<s:iterator?var="row"?value="${index}">
????????<tr>
????????????<s:iterator?var="cell"?value="row">?
????????????????<td>?
????????????????????<s:property?value="cell"?/>
????????????????</td>
????????</s:iterator>
????????</tr>
????</s:iterator>
</table>
??? 在上面的標簽文件中使用了<s:iterator>和<s:property>標簽,<s:iterator>標簽的value屬性值使用了EL,這在低版本的Struts 2中是沒有任何問題的,但在Struts 2.0.11及以后的版本中默認情況下并不能在Struts 2屬性值中使用EL和JSP表達式(也就是說,rtexprvalue參數默認值是false),而只能使用Ognl表達式,而在這種情況下,上面的代碼是無法正常執行的。一種解決方法是將Struts 2的發行包中相應標簽的某個屬性的rtexprvalue參數值設為true,但這種方法并不通用,因為它直接修改了Struts 2。
??? 另外一種方法是通過<s:set>標簽將相應的值保存在ValueStack對象中,再使用Ognl表達式來讀取。使用這種方法可以將上面的代碼修改為如下的形式:
<%@?taglib?prefix="s"?uri="/struts-tags"%>
<table?border="1"?style="font-size:25px">?
????<!--??使用Ognl表達式引用index??-->??
????<s:iterator?var="row"?value="index">
????????<tr>
????????????<s:iterator?var="cell"?value="row">?
????????????????<td>?
????????????????????<s:property?value="cell"?/>
????????????????</td>
????????</s:iterator>
????????</tr>
????</s:iterator>
</table>
??? 下面的代碼調用了table標簽文件,并傳遞了index參數值:
<%@?page?language="java"?contentType="text/html;?charset=UTF-8" pageEncoding="UTF-8"%>
<%@?taglib?prefix="t"?tagdir="/WEB-INF/tags"%>
<%@?taglib?prefix="s"?uri="/struts-tags"%>
<!--??index參數值為grid1??-->
<s:set?var="index"?value="grid1"?/>?
<t:table/>?
<!--??index參數值為grid2??-->
<s:set?var="index"?value="grid2"?/>?
<t:table/>
??? 哪位讀者還有其他的方法傳遞index參數值(不能直接修改Struts2發行包,不使用請求參數),請跟貼!??? 國內最棒的Google Android技術社區(eoeandroid),歡迎訪問!
《銀河系列原創教程》發布
《Java Web開發速學寶典》出版,歡迎定購
<%@?taglib?prefix="t"?tagdir="/WEB-INF/tags"%>
??? 如果在標簽文件中使用Struts 2標簽,就會帶來一個問題。下面先看一個例子。
??? 在WEB-INF\tags目錄中建立一個table.tag文件,代碼如下:
<%@?taglib?prefix="s"?uri="/struts-tags"%>
<%@?attribute?name="index"?type="java.lang.String"?required="true"?%>
<table?border="1"?style="font-size:25px">???
????<s:iterator?var="row"?value="${index}">
????????<tr>
????????????<s:iterator?var="cell"?value="row">?
????????????????<td>?
????????????????????<s:property?value="cell"?/>
????????????????</td>
????????</s:iterator>
????????</tr>
????</s:iterator>
</table>
??? 在上面的標簽文件中使用了<s:iterator>和<s:property>標簽,<s:iterator>標簽的value屬性值使用了EL,這在低版本的Struts 2中是沒有任何問題的,但在Struts 2.0.11及以后的版本中默認情況下并不能在Struts 2屬性值中使用EL和JSP表達式(也就是說,rtexprvalue參數默認值是false),而只能使用Ognl表達式,而在這種情況下,上面的代碼是無法正常執行的。一種解決方法是將Struts 2的發行包中相應標簽的某個屬性的rtexprvalue參數值設為true,但這種方法并不通用,因為它直接修改了Struts 2。
??? 另外一種方法是通過<s:set>標簽將相應的值保存在ValueStack對象中,再使用Ognl表達式來讀取。使用這種方法可以將上面的代碼修改為如下的形式:
<%@?taglib?prefix="s"?uri="/struts-tags"%>
<table?border="1"?style="font-size:25px">?
????<!--??使用Ognl表達式引用index??-->??
????<s:iterator?var="row"?value="index">
????????<tr>
????????????<s:iterator?var="cell"?value="row">?
????????????????<td>?
????????????????????<s:property?value="cell"?/>
????????????????</td>
????????</s:iterator>
????????</tr>
????</s:iterator>
</table>
??? 下面的代碼調用了table標簽文件,并傳遞了index參數值:
<%@?page?language="java"?contentType="text/html;?charset=UTF-8" pageEncoding="UTF-8"%>
<%@?taglib?prefix="t"?tagdir="/WEB-INF/tags"%>
<%@?taglib?prefix="s"?uri="/struts-tags"%>
<!--??index參數值為grid1??-->
<s:set?var="index"?value="grid1"?/>?
<t:table/>?
<!--??index參數值為grid2??-->
<s:set?var="index"?value="grid2"?/>?
<t:table/>
??? 哪位讀者還有其他的方法傳遞index參數值(不能直接修改Struts2發行包,不使用請求參數),請跟貼!??? 國內最棒的Google Android技術社區(eoeandroid),歡迎訪問!
《銀河系列原創教程》發布
《Java Web開發速學寶典》出版,歡迎定購
總結
以上是生活随笔為你收集整理的Struts 2杂谈(2):如何向标签文件中的Struts 2标签传递参数值的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: http切换到https
- 下一篇: 三八节疯狂购物