我需要为各种类使用模板,我试图避免评估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
。
我的问题是如果测试是假的,就避免评估代码块
也许我的设计错了或者这是不可能的...
谢谢
答案 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'}">