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

标签 jsf datatable primefaces

我有关于 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/

相关文章:

java - RichFaces4 不渲染组件

Java EE 5 程序化身份验证

java - 如何从 ChatMessage 类的列表中显示 String 消息属性?

c# - 将数据行数组转换为数据表的简单方法

primefaces - 如何禁用 Primefaces 惰性数据表上的排序?

JSF/PrimeFaces 对话框中的 Javabean 验证错误

jquery - 日期选择器未在下一页数据表上触发

c# - Datatable 选项导致 "Missing operand after ' s' operator"error

ajax - Primefaces ExceptionHandler不能像展示中那样工作

css - <p :datatable> without borders and column headers