我有一个带有渲染属性的panelGroup。如果将rendered属性设置为false,为什么甚至会调用panelGroup中的组件值?我在这里误解了render属性吗?

我想做的是:在panelGroup之前有一个selectManyCheckbox,只有用户在selectManyCheckbox中选择了值并按下按钮后,才应执行panelGroup中的所有操作。这不会像这样工作,因为panelGroup中的组件取决于用户必须在selectManyCheckbox中选择的值。

<h:selectManyCheckbox /> // for the user to choose
<h:commandButton /> // to render the panelGroup

<h:panelGroup rendered="#{someBean.render}">
  <h:dataTable value="#{someOtherBean.loadSomething(someObject)}" var="item">
    // ...
  </h:dataTable>
</h:panelGroup>

最佳答案

rendered属性仅说明是否应在客户端DOM上呈现以下组件。这些组件仍将跟随JSF生命周期事件,并保持托管Bean的值(value)。

编辑:响应解决方法的请求:

我看到的最简单的解决方法是,如果您不希望value属性调用bean方法,则只需对呈现条件进行if检查,即可将逻辑包装在bean方法中。

public void loadSomething(Object someObject) {
  if (render()) {
    //Do loadSomething logic
  }
}

关于jsf - JSF:呈现的属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6263714/

10-11 17:45