我正在使用SelectMany Checkboxes primefaces并在Bean中存储值时遇到一些麻烦。我需要一个SelectManyCheck框数组。这里是目前为止的xhtml,JSF SelectMany复选框,绑定到子列表
<c:set var="obj" value="#{userBean.userSettingsMap}"> </c:set>
<c:forEach items="#{obj}" var="entry">
<h:outputText value="#{entry.key} " /><!--Correctly prints the key -->
<p:selectManyCheckbox value="#{entry.value}"><!-- `entry.value` SHOULD correspond to inner lists --->
<!-- I want values of these check boxes to be updated in my ManagedBean's property -->
<f:selectItem itemLabel="Option 1" itemValue="Option 1" />
<f:selectItem itemLabel="Option 2" itemValue="Option 2" />
<f:selectItem itemLabel="Option 3" itemValue="Option 3" />
</p:selectManyCheckbox>
</c:forEach>
在页面上呈现选择多个复选框的数组。但是当我提交页面时,子列表不会更新。而我的ManagedBean中的对象没有得到更新。
所以,在提交时,我得到了对话框上显示的空白列表。
{密钥1 = [],键2 = []}
以我ManagedBean我有,
private Map<String,List<String>> userSettingsMap;
当子列表将对应于每个<p:selectManyCheckbox>
上视图
提交按钮与示例中的相同。
<p:commandButton value="Submit" update="display" oncomplete="dlg.show()" />
<p:dialog header="Selected Values" modal="true" showEffect="fade" hideEffect="fade" widgetVar="dlg">
<p:outputPanel id="display">
<p:dataList value="#{userService.userMaintainceMap}" var="option">
#{option}
</p:dataList>
</p:outputPanel>
很好的解释@Arjan,我会尝试相应地改变我的代码,然后回来。 thnx。\ –
澄清第二个问题更多:这不是因为'List'是通用的,而是因为'Map'是通用的,因此EL没有看到该值实际上是一个'List'。然而,'UISelectMany'组件本身支持一个'List'作为值(其类型默认为'String',但可以通过显式指定'Converter'来覆盖)。 – BalusC
由两个伟大的人回答和评论! @BalusC thnx清理。我最近一直在关注你的博客。很高兴看到您的评论。我知道我会需要自定义转换器。但是我发现自己对这方面的知识不够。我将探索转换器。 thnx很多:) –