【问题标题】:Primefaces DataTable p:rowEditor how to retrieve editing status?Primefaces DataTable p:rowEditor 如何检索编辑状态?
【发布时间】:2013-07-29 07:54:20
【问题描述】:

PF 3.5.10、Mojarra 2.1.21、JBoss 7.1.1、PE 7.1、Omnifaces 1.5

我想在 p:Dialog 中使用数据表行编辑。 我有一个在对话框中进行行编辑的数据表。 (展示:http://www.primefaces.org/showcase/ui/datatableRowEditing.jsf) 如果我在对话框上单击“确定”,则应保存更改,如果单击“取消”,更改将被取消。如果激活了一行的行编辑并且我可以更改一行中的值,然后我在对话框上单击“确定”,则一行中的活动更改将丢失。 如何检索实际的编辑状态?我如何知道数据表中的一行当前是否被编辑?如果我知道我可以警告用户更改将会丢失。

编辑:链接到 PF 来源Grepcode: PF sources isEditingRow()

<p:dialog>
  <h:form>
     <p:tabView cache="false" id=.. binding=..>
         <p:tab>
            <p:dataTable binding=.. id=... widgetVar=... var=.. >
            </p:dataTable>
         </p:tab>
     </p:tabView>
         <p:commandButton process="@form" action="myBean.listener()" value="OK" update="@form"
           onstart="anotherTable.filter()" />

  </h:form>
</p:dialog>

编辑:我接受了答案,因为我自己实现了所需的功能。

【问题讨论】:

    标签: jsf-2 primefaces datatable


    【解决方案1】:

    要么将组件绑定到支持 bean,要么编写自己的按钮来触发编辑模式,这也会在支持 bean 中设置一个标志,您可以使用它来确定编辑状态。

    绑定组件可能是更简单的选择...

    【讨论】:

    • “绑定组件”是什么意思?我尝试绑定“DataTable”和“RowEditor”组件。 DataTable 有 isEditingRow() 方法,这个方法总是返回 false。而且我还没有在 RowEditor 组件中找到任何有趣的方法。有没有我错过的方法?
    • 您可能会遇到与相位相关的问题。当您单击“确定”时,它会处理表单 - 可能还有已编辑的行。当您调用 isEditingRow() 时,编辑已经完成并且组件已经被重置。您是否在按钮上进行部分提交?
    • 我更新了我的答案。我在 commandButton 上使用默认的部分提交值,这是错误的。如果我在 PF Sources 中搜索 isEditingRow() ,它将仅在 DataTableRenderer 类中使用一次。我不确定该方法是什么。
    • 命令按钮有process="@form",这意味着部分提交将处理您表单中的所有内容。您需要的是process="@this"(也可能用于更新),它不会与行编辑器混在一起。现在看看在myBean.listener() 中你是否得到了与.isEditingRow() 不同的结果
    • 我已经尝试过您的建议,将 process="@form" 替换为 process="@this" 不幸的是它没有帮助。
    猜你喜欢
    • 2013-10-21
    • 2012-02-21
    • 1970-01-01
    • 2015-01-02
    • 2014-04-12
    • 1970-01-01
    • 2012-12-22
    • 2016-07-25
    • 1970-01-01
    相关资源
    最近更新 更多