【问题标题】:Avoid evaluation of code inside c:if tag in JSTL避免在 JSTL 中评估 c:if 标记内的代码
【发布时间】:2012-07-09 17:44:01
【问题描述】:

我需要为各种类使用模板,并且我试图避免评估 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 foundanyway。
我的问题是如果测试为假,则避免评估代码块


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

【问题讨论】:

  • 关于您的编辑:如果测试为假,则不会评估 if 中的块,应该没有任何问题。

标签: jsp jsf jstl


【解决方案1】:

创建一个自定义 EL 函数来检查它。类似的东西

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

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

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

【讨论】:

    【解决方案2】:

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

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

    或其他等价条件:

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

    【讨论】:

      猜你喜欢
      • 2016-03-19
      • 1970-01-01
      • 1970-01-01
      • 2014-06-13
      • 2021-04-11
      • 2010-10-03
      • 2014-02-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多