如何在JSF中设置变量?

fal*_*lla 4 java variables jsf 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>
Run Code Online (Sandbox Code Playgroud)

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

   <?:??? 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>
Run Code Online (Sandbox Code Playgroud)

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

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

Jig*_*shi 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;
}
Run Code Online (Sandbox Code Playgroud)