0

我想根据我是否选择的复选框在表单中呈现单个组件(h:selectManyCheckbox) 。

<h:form> 
    <h:selectBooleanCheckbox value="#{bean.var}">
        <f:ajax event="click" render="employeeCheckboxes" />
    </h:selectBooleanCheckbox>

    <h:selectManyCheckbox 
        id="employeeCheckboxes"
        value="#{bean.checkboxes}"
        rendered="#{var}">
    </h:selectManyCheckbox>
</h:form>

但是,组件不会在选中或取消选中复选框时重新呈现。但是,我可以重新渲染整个表单,但我不希望这样。

4

2 回答 2

1

您不能引用一个组件,<f:ajax render>该组件首先从未在 HTML 输出中呈现。在<f:ajax render>幕后使用 JavaScriptdocument.getElementById()来查找 HTML 元素,以便使用来自 ajax 响应的新 HTML 结构对其进行更新。但是,如果一个 JSF 组件首先从未在 HTML 输出中呈现,那么 JavaScript 也无法在任何地方找到它。

您需要将它包装在另一个始终呈现的组件中。

<h:form> 
    <h:selectBooleanCheckbox value="#{bean.var}">
        <f:ajax render="employeeCheckboxesGroup" />
    </h:selectBooleanCheckbox>

    <h:panelGroup id="employeeCheckboxesGroup">
        <h:selectManyCheckbox 
            id="employeeCheckboxes"
            value="#{bean.checkboxes}"
            rendered="#{bean.var}">
        </h:selectManyCheckbox>
    </h:panelGroup>
</h:form>

(请注意,我已将其删除event="click",因为它已经是默认设置)

也可以看看:

于 2013-09-19T13:00:39.670 回答
-1

嗨,我认为您错过了托管 bean 名称

渲染属性

复选框标签。

于 2013-09-19T07:04:26.847 回答