如何在JSF中设置变量?

时间:2011-12-20 18:39:37

标签: java jsf variables jstl el

我的代码在这里迭代每一行的列,每次迭代计算rendered属性,过度调用testRule

<p:dataTable ...>
    <p:column ...>
        ...
    </p:column>

    <p:column rendered="#{managedBean.testRule('rules.canDoActions')}">
        <!-- Action buttons -->
        <h:commandButton ...>
        <h:commandButton ...>
    </p:column>
</p:dataTable>

为了获得更好的性能,我想知道将结果设置为变量,但我不知道如何......它会变成这样:

   <?:??? var="canDoActions" value="#{managedBean.testRule('rules.canDoActions')}">
   <p:dataTable ...>
        <p:column ...>
            ...
        </p:column>

        <p:column rendered="#{canDoActions}">
            <!-- Action buttons -->
            <h:commandButton ...>
            <h:commandButton ...>
        </p:column>
    </p:dataTable>

另外,我不允许使用核心标记库,这意味着<c:set ../>是不可能的。

在该范围内,我如何设置变量?或者,如果不可能,您建议如何解决性能问题?

1 个答案:

答案 0 :(得分:5)

  

我不允许使用核心标记库,这意味着<c:set ../>无法使用

然后你可以将它存储在Bean本身并检查它是否为null calculateRules并设置值或只是返回。

例如:

HashMap<String, Boolean> map;

public boolean testRule(String stringInput) {
   Boolean result = map.get(stringInput);

   if (result == null) {
       //calculate and set in map
   }

   return result;
}