Struts 2杂谈(2):如何向标签文件中的Struts 2标签传递参数值
生活随笔
收集整理的這篇文章主要介紹了
Struts 2杂谈(2):如何向标签文件中的Struts 2标签传递参数值
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
標(biāo)簽文件是JSP自定義標(biāo)簽中的一種,實現(xiàn)的方法在WEB-INF\tags目錄或子目錄中建立一個.tag文件,如table.tag,并通過taglib指令來引用.tag文件所在的目錄,代碼如下:
<%@?taglib?prefix="t"?tagdir="/WEB-INF/tags"%>
??? 如果在標(biāo)簽文件中使用Struts 2標(biāo)簽,就會帶來一個問題。下面先看一個例子。
??? 在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>
??? 在上面的標(biāo)簽文件中使用了<s:iterator>和<s:property>標(biāo)簽,<s:iterator>標(biāo)簽的value屬性值使用了EL,這在低版本的Struts 2中是沒有任何問題的,但在Struts 2.0.11及以后的版本中默認情況下并不能在Struts 2屬性值中使用EL和JSP表達式(也就是說,rtexprvalue參數(shù)默認值是false),而只能使用Ognl表達式,而在這種情況下,上面的代碼是無法正常執(zhí)行的。一種解決方法是將Struts 2的發(fā)行包中相應(yīng)標(biāo)簽的某個屬性的rtexprvalue參數(shù)值設(shè)為true,但這種方法并不通用,因為它直接修改了Struts 2。
??? 另外一種方法是通過<s:set>標(biāo)簽將相應(yīng)的值保存在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>
??? 下面的代碼調(diào)用了table標(biāo)簽文件,并傳遞了index參數(shù)值:
<%@?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參數(shù)值為grid1??-->
<s:set?var="index"?value="grid1"?/>?
<t:table/>?
<!--??index參數(shù)值為grid2??-->
<s:set?var="index"?value="grid2"?/>?
<t:table/>
??? 哪位讀者還有其他的方法傳遞index參數(shù)值(不能直接修改Struts2發(fā)行包,不使用請求參數(shù)),請跟貼!??? 國內(nèi)最棒的Google Android技術(shù)社區(qū)(eoeandroid),歡迎訪問!
《銀河系列原創(chuàng)教程》發(fā)布
《Java Web開發(fā)速學(xué)寶典》出版,歡迎定購
<%@?taglib?prefix="t"?tagdir="/WEB-INF/tags"%>
??? 如果在標(biāo)簽文件中使用Struts 2標(biāo)簽,就會帶來一個問題。下面先看一個例子。
??? 在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>
??? 在上面的標(biāo)簽文件中使用了<s:iterator>和<s:property>標(biāo)簽,<s:iterator>標(biāo)簽的value屬性值使用了EL,這在低版本的Struts 2中是沒有任何問題的,但在Struts 2.0.11及以后的版本中默認情況下并不能在Struts 2屬性值中使用EL和JSP表達式(也就是說,rtexprvalue參數(shù)默認值是false),而只能使用Ognl表達式,而在這種情況下,上面的代碼是無法正常執(zhí)行的。一種解決方法是將Struts 2的發(fā)行包中相應(yīng)標(biāo)簽的某個屬性的rtexprvalue參數(shù)值設(shè)為true,但這種方法并不通用,因為它直接修改了Struts 2。
??? 另外一種方法是通過<s:set>標(biāo)簽將相應(yīng)的值保存在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>
??? 下面的代碼調(diào)用了table標(biāo)簽文件,并傳遞了index參數(shù)值:
<%@?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參數(shù)值為grid1??-->
<s:set?var="index"?value="grid1"?/>?
<t:table/>?
<!--??index參數(shù)值為grid2??-->
<s:set?var="index"?value="grid2"?/>?
<t:table/>
??? 哪位讀者還有其他的方法傳遞index參數(shù)值(不能直接修改Struts2發(fā)行包,不使用請求參數(shù)),請跟貼!??? 國內(nèi)最棒的Google Android技術(shù)社區(qū)(eoeandroid),歡迎訪問!
《銀河系列原創(chuàng)教程》發(fā)布
《Java Web開發(fā)速學(xué)寶典》出版,歡迎定購
總結(jié)
以上是生活随笔為你收集整理的Struts 2杂谈(2):如何向标签文件中的Struts 2标签传递参数值的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: http切换到https
- 下一篇: js渐渐入门之懒人框架- laz.js