选择行时会调用错误的setter

时间:2017-03-17 09:59:14

标签: jsf primefaces datatable

使用Primefaces 5.2和JSF 2.1

我遇到了以下问题

我得到了一个p:dataTable,当用户选择一行时,所选对象的数据应显示在表格下方。一个要求是表格下方应该有一个复选框,应该是可编辑的。如果用户切换复选框并在表格中选择其他条目,则应保存复选框“新值”。 (见下面的代码)

但我观察到以下行为。当我选择object1时,选中它的复选框然后选择object2,将调用object2的setter,而不是object1。因此object2.someValue将被更改,而object1.someValue将不会被更改。任何想法?

<p:dataTable var="myVar" selectionMode="single"
            id="myTable" selection="#{form.myValue}"
             rowKey="#{myVar.id}"
            value="#{form.myTableData}">

<!-- columns here -->
    <p:ajax event="rowSelect" process="my_booleancheckbox" update="wrapper">
<p:dataTable>

<h:panelGroup id="wrapper">
    <p:booleanCheckbox value="#{form.myValue.someValue}" id="my_booleancheckbox"/>
    <!--other stuff here -->
</h:panelGroup>

1 个答案:

答案 0 :(得分:1)

这就是它应该如何工作,rowSelect事件在selection的属性p:dataTable更新后被触发

将您的ajax操作移至p:booleanCheckbox

<p:dataTable var="myVar" selectionMode="single"
        id="myTable" selection="#{form.myValue}"
         rowKey="#{myVar.id}"
        value="#{form.myTableData}">

<!-- columns here -->    
<p:dataTable>

<h:panelGroup id="wrapper">
    <p:booleanCheckbox value="#{form.myValue.someValue}" id="my_booleancheckbox">
        <p:ajax process="my_booleancheckbox" update="wrapper">
    </p:booleanCheckbox>
    <!--other stuff here -->
</h:panelGroup>