程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Struts 2雜談(2):如何向標簽文件中的Struts 2標簽傳遞參數值

Struts 2雜談(2):如何向標簽文件中的Struts 2標簽傳遞參數值

編輯:關於JAVA

標簽文件是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發行包,不使用請求參數),請跟貼!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved