我在复合组件中使用 SelectBooleanCheckbox,该组件在页面上使用 ui:repeat 重复呈现。按下 Save 按钮后,页面会更新,但即使 bean 值为 true,也不会选中该复选框。
<p:selectBooleanCheckbox id="someId" value="#{cc.attrs.item.property}"/>
#{cc.attrs.item.property}
这就是页面上显示的内容:
当我导航到初始页面或在浏览器中重新加载页面后,一切都正常。
我还尝试将提交更改为非 ajax 并使用 h:selectBooleanCheckbox 但这并没有太大变化。
==========================更多代码=================
页面.xhtml
...
<ui:repeat id="listID" value="#{itemList}" var="listElement">
<cc:componentWithCheckbox id="theComponent" item="#{listElement}"/>
</ui:repeat>
...
componentWithCheckbox.xhtml
<cc:interface>
<cc:attribute name="item" required="true" />
</cc:interface>
<cc:implementation>
<div id="#{cc.clientId}">
<p:inputText value="#{cc.attrs.item.someTextProperty}"/>
<p:selectBooleanCheckbox id="someId" value="#{cc.attrs.item.property}"/>
#{cc.attrs.item.property}
</div>
</cc:implementation>
豆
Bean 对字段没有任何作用。只需将其保存在数据库中。按下保存后,bean 和数据库中的值是正确的。只是没有在页面上呈现。
====================== 来自 MROD 的解决方案 ======================
我刚刚在 c:forEach 的视图中切换了 ui:repeat,一切都很好。:) 我只需要更改重复元素的 id,因为使用 forEach 每个元素都相同。我刚刚将 status.index 添加到 id 以解决该问题。