1

我需要为各种类使用模板,并且我试图避免对 c:if 中的代码进行评估,因为beangetPrintResource()只有 if 扩展了一个特定的类。

我正在努力

<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无论如何。
我的问题是如果测试为假,则避免评估代码块


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

4

2 回答 2

0

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

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

或另一个等效条件:

<c:if test="${bean['class'].simpleName eq 'PrintableClass'}">
于 2013-07-12T10:16:30.910 回答
0

创建一个自定义 EL 函数来检查它。就像是

<c:if test="${myFn:isPrintResourcePossible(bean)}">

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

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

于 2012-07-10T10:36:26.430 回答