当我选择复选框时,如何在jsf中渲染选中的复选框值

时间:2012-06-06 15:26:39

标签: jsf-2

我有渲染复选框。当我选中复选框时,复选框值应显示在面板中。我已为此编写代码但未使用

                              

                              <h:selectManyCheckbox id="chkedition" value="#{newspaperBean.selectedEditions}" layout="lineDirection" styleClass="nostyle">
                                  <f:selectItems value="#{newspaperBean.searchEditionByNewspaper()}" var="item" itemLabel="#{item.editionName}" itemValue="#{item.editionName}"/>
                                  <f:ajax render="display" event="select"/>
                              </h:selectManyCheckbox>
                          </td>
                        </tr>
                            <tr>
                                <td colspan="2">
                                    <p:panel id="display" header="You have selected">
                                    <c:forEach items="#{newspaperBean.selectedEditions}" var="it">
                                        <h:outputText value="#{it}"/><br/>
                                    </c:forEach>
                                    </p:panel>
                                </td>
                            </tr>

这在我提交表单时有效,但我想在选择复选框时使用。

1 个答案:

答案 0 :(得分:1)

删除event="select"属性。这是挂钩的不正确事件。它仅在您在输入字段和textareas中选择任何文本时触发,而不是在您单击复选框时触发。

<f:ajax render="display" />

默认事件已经valueChange,它将在复选框中解析为click,这正是您所需要的。如果需要,您可以通过event="click"明确指定它,但如上所述,它已经是默认值,所以只需省略它。

另一个潜在的问题是面板中的<c:forEach>。如果bean是视图范围的,那么这将失败,因为它在视图构建时运行并获得其自己的视图范围bean的单独实例,该实例可能不包含提交的数据。您需要使用<ui:repeat>代替。

<ui:repeat value="#{newspaperBean.selectedEditions}" var="it">
    <h:outputText value="#{it}"/><br/>
</ui:repeat>

另见: