2012-05-18 100 views
3

我想定義一個自定義的JSP標籤,它產生一個交替行背景顏色的HTML表格。因此,根據表的行索引設置CSS類「odd」和「even」。自定義JSP標記文件<%@ variable ..>不起作用?

沒有JSP標記的示例工作正常,問題是:以下定製標記示例中出現了什麼問題?我如何通過兩個自定義標籤傳遞變量「rowIndex」?

參考http://docs.oracle.com/javaee/1.4/tutorial/doc/JSPTags5.html沒有幫助。

感謝

示例JSP頁面的作品:

<c:set var="rowIndex" value="1"/> 
<table class="datatable"> 
    <tbody> 
     <tr class="${(rowIndex %2 == 0) ? 'odd' : 'even'}"><c:set var="rowIndex" value="${rowIndex+1}"/> 
      <td width="200px"><bean:message key='myKey' /></td> 
      <td>todoValue</td> 
     </tr> 
     <tr class=${(rowIndex %2 == 0) ? 'odd' : 'even'}><c:set var="rowIndex" value="${rowIndex+1}"/> 
      <td><bean:message key='myKey' /></td> 
      <td>todoValue</td> 
     </tr> 
    </tbody> 
</table> 

與自定義標籤示例JSP頁面無法正常工作:

JSP頁面

<%@taglib tagdir="/WEB-INF/tags" prefix="myApp"%> 

.... 

<myApp:keyValueDataTable> 
    <myApp:keyValueDataTableRow /> 
    <myApp:keyValueDataTableRow /> 
    <myApp:keyValueDataTableRow /> 
</myApp:keyValueDataTable> 

dataTable.tag

<%@ include file='/tiles/taglibs.inc'%> 
<%@tag description="Description" pageEncoding="UTF-8"%> 

<%@ variable name-given="rowIndex" %> 
<c:set var="rowIndex" value="1" /> 

<table class="datatable"> 
    <tbody> 
     <jsp:doBody/> 
    </tbody> 
</table> 

tableRow.tag

<%@ include file='/tiles/taglibs.inc'%> 
<%@tag description="Description" pageEncoding="UTF-8"%> 

<%@ variable name-given="rowIndex" %> 

     <tr class="${(rowIndex %2 == 0) ? 'odd' : 'even'}"> 
      <c:set var="rowIndex" value="${rowIndex+1}" /> 
      <td width="200px"><c:out value="Index=${rowIndex}"></c:out> <bean:message key='myKey' /></td> 
      <td>todoValue</td> 
     </tr> 

回答

0

您是否嘗試過的URI語法?

<%@ taglib prefix="utils" uri="http://www.example.com/tld/utils"%> 
+0

您的意思是將「<%@ taglib tagdir =」/ WEB-INF/tags「prefix =」myApp「%> 」替換爲「<%@ taglib prefix =」utils「uri =」http:// www .example.com的/ TLD/utils的 「%>」?這不起作用,因爲它是在/ WEB-INF/tags文件中定義的。 – CodeFan42

0

將變量從您的頁面傳遞到標記使用屬性指令。在您的標記文件補充一點:

<%@ attribute name="rowIndex" required="true" type="java.lang.Integer" %> 

而且在使用該標籤只需要添加的rowIndex爲標記屬性JSP。

+0

我試過這個,結果是該屬性作爲值傳遞,而不是作爲標籤中的引用。因此,更改(rowIndex + 1)僅在tableRow.tag中可用,並且不會傳遞給下一個「」 – CodeFan42

+0

只需在下一個標記中再創建一個參數並傳遞新值。 – alexey28