我有关于 selectOneMenu 和设置值的问题。我有一张对象示例光盘,其中包含 ID、文本和List<SampleDescValues>
。对于每个数据表行,文本是输出标签,选择一个菜单值是List<SampleDescValues>
.
XHTML:
<h:panelGroup id="tables">
<p:dataTable resizableColumns="true"
var="sampleDesc" id="SampleDescTable" rowIndexVar="rowIndex"
value="#{sampleBean.sampleDescList.list}"
rendered="#{sampleBean.sampleDescList.list.size() gt 0}">
<p:column>
<h:outputLabel value="#{sampleDesc.sampleDescText}"/>
</p:column>
<p:column>
<h:selectOneMenu required="#{sampleBean.sampleDescList.list.size() gt 0}" converter="#{sampleDescValueConverter}"
id="SampleDescValue" value="#{sampleBean.selectedSampleDescList.get(rowIndex)}">
<f:selectItem itemLabel="Select One" itemValue="#{null}"/>
<f:selectItems value="#{sampleDesc.sampleDescValues}" var="sdv"
itemLabel="#{sdv.sampleDescValuesText}" itemValue="#{sdv}" />
</h:selectOneMenu>
</p:column>
</p:dataTable>
</h:panelGroup>
我已经设置了转换器并且它可以工作,因为我将其设置为单个 SampleDescValue 并设置了该值。
问题是,当我尝试使用数据库中的示例填充表单时,它只能设置其中一个下拉菜单,而可能存在无限数量的选择菜单
我将选择的值设置为private List<SampleDescValue> selectedSampleDescList;
当我尝试提交时它什么也不做,它在数据表未呈现时起作用。
您的菜单值错误:
<h:selectOneMenu value="#{sampleBean.selectedSampleDescList.get(rowIndex)}">
不可能执行set
对该 EL 表达式进行操作。
请改用大括号表示法:
<h:selectOneMenu value="#{sampleBean.selectedSampleDescList[rowIndex]}">
请注意,这需要一个非空值selectedSampleDescList
。因此,请确保您已经使用正确初始化它new ArrayList<>()
预先。 EL 不会为你做这些事。它只会使用设置列表项List#add(index, object)
method.
也可以看看:
- 我们的 EL 维基页面 https://stackoverflow.com/tags/el/info
无关对于具体问题,这个表达式
#{sampleBean.sampleDescList.list.size() gt 0}
可以简化如下
#{not empty sampleBean.sampleDescList.list}
这在required
的属性<h:selectOneMenu>
因为它会always评价true
在那时候。只需使用required="true"
直接代替。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)