Primefaces数据表单元格编辑不会更新

时间:2014-06-12 19:03:53

标签: java jsf primefaces datatable tablecelleditor

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

我有三个问题:

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

    <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();
    }
    

    以下是与datatable相同的.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()将editable设置为false。我正在使用Primefaces 4.0

1 个答案:

答案 0 :(得分:0)

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