2012-05-18 63 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