【问题标题】:Primefaces datatable cell editing doesn't updatePrimefaces数据表单元格编辑不更新
【发布时间】:2014-08-03 05:30:42
【问题描述】:

我有一个带有单元格编辑的 primefaces 数据表,它在视图中的布尔变量上切换。

我有三个问题:

  1. 在编辑模式下,我更改了一个值,然后单击页面上的保存按钮,它不会保留新值,如果我先单击页面上的其他任何位置,然后单击保存,它将保留该值。如果您先单击保存,我需要它来保留该值。
  2. 如果我编辑一个作为输入文本的单元格,然后单击该字段,则该字段现在是一个输出文本,直到我再次单击该字段。我希望该字段在编辑模式下看起来像输入文本。
  3. 当单击保存按钮时,支持方法将可编辑布尔值设置为 false,并且页面的其余部分服从,并且 dataTable 看起来也服从,但是如果您单击一个单元格,它将允许您对其进行编辑。

代码如下:

<p:dataTable value="#{view.LineItems}" var="lineItem" rowKey="#{lineItem.lineItemId}"
                 resizableColumns="false" editable="#{view.editable}" editMode="cell"
                 editingRow="#{view.editable}" id="requestLineItemsTable">

        <p:ajax event="cellEdit" listener="#{view.cellEdited}" immediate="true" update="@this" />

        <p:column styleClass="centerColumnData" headerText="Item Name" style="width: 140px;">
            <p:cellEditor>
                <f:facet name="output">
                    <h:outputText value="#{lineItem.title}"/>
                </f:facet>
                <f:facet name="input">
                    <h:inputText value="#{lineItem.title}"/>
                </f:facet>
            </p:cellEditor>
        </p:column> ...

这是后端(还没有做任何事情)

public void cellEdited(CellEditEvent event)
{
    Object oldValue = event.getOldValue();
}

这里是与数据表相同的 .xhtml 页面上的保存和编辑按钮

 <p:commandLink process="@this"
                       action="#{view.changeModeToEdit}"
                       update="@form"
                       rendered="#{!view.editMode">
            <h:graphicImage library="images" name="edit20.png" title="#{__Common.edit}"
                            style="height: 15px; width: 15px;"/>
        </p:commandLink>
<components:linkWithSpinner linkStyle="margin-right: 20px;" loadingImageStyle="margin-right: 20px;"
                                    linkStyleClass="activeButton saveButtonRequestDetails" loadingImageStyleClass="saveButtonRequestDetails"
                                    linkText="#{__CommonButton.save}"
                                    process="@form" update="@form"
                                    actionMethod="#{view.updateRequest()}"/>

view.updateRequest() 将可编辑设置为 false。我正在使用 Primefaces 4.0

【问题讨论】:

  • 我更新到 primefaces 5 并修复了问题 3,然后修复问题 1 我必须将 async="true" 添加到 p:ajax 现在它不会在保存后尝试运行 ajax被点击。现在我需要彻底测试这个 ajax 调用是异步的。

标签: java jsf primefaces datatable tablecelleditor


【解决方案1】:

所以我想出了解决这些问题的方法。我专注于使用内置的编辑表,但您可以只拥有一个普通的数据表,并且列可以包含输入文本字段。那么您不必担心我上面的问题中的大多数问题。如果您需要在编辑和非编辑视图之间切换,那么我仍然不知道如何完全修复它,除了文件中有两个带有渲染标签的数据表,但是您正在复制一个带有输入文本字段的表格和一个带有输出文本字段,这不是最好的方法。

【讨论】:

    猜你喜欢
    • 2014-01-20
    • 2013-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-23
    • 2011-09-15
    • 1970-01-01
    • 2023-03-25
    相关资源
    最近更新 更多