gpt4 book ai didi

jsf - :selectOneMenu in p:dataTable doesn't submit its value

转载 作者:行者123 更新时间:2023-12-03 04:04:59 26 4
gpt4 key购买 nike

我有关于 selectOneMenu 和设置值的问题。我有一个对象 SampleDesc,其中包含 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) 设置列表项方法。

另请参阅:

<小时/>

与具体问题无关,这个表达式

#{sampleBean.sampleDescList.list.size() gt 0}

可以简化如下

#{not empty sampleBean.sampleDescList.list}

这在 required 中是不必要的<h:selectOneMenu> 的属性因为它总是评估 true在那时候。只需使用 required="true"直接代替。

关于jsf - :selectOneMenu in p:dataTable doesn't submit its value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13016159/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com