【问题标题】:Custom JSP tag file <%@ variable ..> doesn't work?自定义 JSP 标记文件 <%@ variable ..> 不起作用?
【发布时间】:2012-05-25 20:17:16
【问题描述】:

我想定义一个自定义 JSP 标记,它会生成一个带有交替行背景颜色的 HTML 表格。因此 CSS 类“奇数”和“偶数”是根据表的行索引设置的。

没有 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>

【问题讨论】:

    标签: java jsp jsp-tags


    【解决方案1】:

    你试过 URI 语法吗?

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

    【讨论】:

    • 你的意思是用“"?这不起作用,因为在 /WEB-INF/tags 的文件中定义。
    【解决方案2】:

    将变量从您的页面传递到标签使用属性指令。在你的标签文件中添加这个:

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

    在使用这个标签的jsp中,只需添加rowIndex作为标签属性。

    【讨论】:

    • 我试过了,结果是属性作为值而不是标签中的引用传递。因此更改(rowIndex+1)仅在 tableRow.tag 中可用,不会传递给下一个“
    • 只需在下一个标签中再创建一个参数并传递新值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-27
    • 2015-04-23
    • 2011-04-16
    • 1970-01-01
    • 2016-07-05
    • 1970-01-01
    相关资源
    最近更新 更多