表达式语言中不允许Javabean函数为空?

时间:2012-11-07 19:40:11

标签: jsp tomcat el

我正在尝试编写一个简单的页面,仅用于在添加实际数据之前进行测试。

我有一个接口,它指定一个返回布尔值的方法isEmpty(),在JSP中包含以下代码:

<c:if test="${not empty output}">
    <h2>${output.title}</h2>
    <c:choose>
        <c:when test="${output.empty}">
            <h3>No results found.</h3>
        </c:when>
        <c:otherwise>
            <table title="Unique Users Report">
                <tr>
                    <th>Range</th>
                    <th>Number of Unique Users</th>
                </tr>
                <tr>
                    <td>Monday<br />10/29/2012</td>
                    <td>1990</td>
                </tr>
                <tr>
                    <td>Tuesday<br />10/30/2012</td>
                    <td>1000</td>
                </tr>
                <tr>
                    <td>Wednesday<br />10/31/2012</td>
                    <td>2112</td>
                </tr>
                <tr>
                    <td>Thursday<br />11/01/2012</td>
                    <td>2321</td>
                </tr>
            </table>
        </c:otherwise>
    </c:choose>
</c:if>

由于此时输出未设置到模型中,我甚至不应该使用这段代码。用“$ {not empty output}”替换测试“$ {output.empty}”中的行允许Tomcat解析此EL。但是,使用当前的代码,代码失败并出现以下错误(请注意,此时甚至没有实现输出,因此模型中没有任何内容):

org.apache.jasper.JasperException: /WEB-INF/jsp/reports/uniqueUsers.jsp(19,3) "${output.empty}" contains invalid expression(s): javax.el.ELException: Error Parsing: ${output.empty}
at org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:40)
at org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:407)
at org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:198)
at org.apache.jasper.compiler.Validator$ValidateVisitor.checkXmlAttributes(Validator.java:1186)
at org.apache.jasper.compiler.Validator$ValidateVisitor.visit(Validator.java:846)

那么,EL中不允许使用空属性,还是有些东西我不见了?我正在使用Tomcat 6.0.32。

1 个答案:

答案 0 :(得分:0)

我能在这里找到答案: http://www.coderanch.com/t/464534/JSP/java/JSTL-empty-keyword

显然你可以使用$ {bean ['empty']}来访问这个属性,这看起来很愚蠢,但确实如此。