1

我已经渲染了复选框。当我选择复选框时,复选框值应该显示在面板中。我为此编写了代码但没有工作

                              <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>

这在我提交表单时有效,但我希望在我选择复选框时这样做。

4

1 回答 1

1

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

<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>

也可以看看:

于 2012-06-06T15:39:49.193 回答