【问题标题】:Wrong setter is called when row is selected选择行时调用了错误的设置器
【发布时间】:2017-03-17 09:59:14
【问题描述】:

我在使用 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>

【问题讨论】:

    标签: jsf primefaces datatable


    【解决方案1】:

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

    将您的 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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-14
      • 1970-01-01
      • 1970-01-01
      • 2019-06-08
      相关资源
      最近更新 更多