避免评估JSTL中c:if标记内的代码

时间:2012-07-10 09:10:35

标签: jsp jsf jstl

我需要为各种类使用模板,我试图避免评估c中的代码:if因为 bean 类只有在扩展时才有getPrintResource()一个特定的班级。

我正在尝试

<c:if test="${bean instanceOf PrintableClass}">...

<c:if test="${! empty bean.printResource}">...

避免评估此元素

<c:if test="${...}">
   <tag:printResource id="printBtn"
    rendered="#{bean.printable}"
    resource="#{bean.printResource}" 
       label="#{msg.print}">
   </tag:printResource>
</c:if>

唯一取得的成果是Property "printResource" not found on *bean*


修改

即使我能够为c:if建立有效的测试,无论如何,属性resource都会被评估为Property "printResource" not found
我的问题是如果测试是假的,就避免评估代码块


也许我的设计错了或者这是不可能的...
谢谢

2 个答案:

答案 0 :(得分:0)

创建一个检查它的自定义EL函数。像

这样的东西
<c:if test="${myFn:isPrintResourcePossible(bean)}">

EL函数只是某个类中的静态方法,在标记库描述符中声明。

有关教程,请参阅http://docs.oracle.com/javaee/1.4/tutorial/doc/JSPIntro7.html

答案 1 :(得分:0)

您可以检查bean是否是预期类的实例:

<c:if test="${bean.getClass().name =='my.package.PrintableClass'}">

或另一个等效条件:

<c:if test="${bean['class'].simpleName eq 'PrintableClass'}">