我有渲染复选框。当我选中复选框时,复选框值应显示在面板中。我已为此编写代码但未使用
<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>
这在我提交表单时有效,但我想在选择复选框时使用。
答案 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>