Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Primefaces数据表单元格编辑不';t更新_Java_Jsf_Primefaces_Datatable_Tablecelleditor - Fatal编程技术网

Java Primefaces数据表单元格编辑不';t更新

Java Primefaces数据表单元格编辑不';t更新,java,jsf,primefaces,datatable,tablecelleditor,Java,Jsf,Primefaces,Datatable,Tablecelleditor,我有一个带单元格编辑的primefaces数据表,它在视图中的布尔变量上切换 我有三个问题: 在编辑模式下,我更改一个值,然后单击页面上的“保存”按钮,它不会保留新值,如果我先单击页面上的其他位置,然后单击“保存”,它将保留该值。如果您先单击“保存”,我需要它来保留值 如果我编辑了一个单元格,它是一个输入文本,我点击了该字段,现在它是一个输出文本,直到我再次点击它。我希望字段在编辑模式下看起来像输入文本 单击save按钮时,backing方法将editable boolean设置为false,页

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

我有三个问题:

  • 在编辑模式下,我更改一个值,然后单击页面上的“保存”按钮,它不会保留新值,如果我先单击页面上的其他位置,然后单击“保存”,它将保留该值。如果您先单击“保存”,我需要它来保留值
  • 如果我编辑了一个单元格,它是一个输入文本,我点击了该字段,现在它是一个输出文本,直到我再次点击它。我希望字段在编辑模式下看起来像输入文本
  • 单击save按钮时,backing方法将editable boolean设置为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> ...
    
    下面是与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()将可编辑设置为false。我正在使用Primefaces 4.0,所以我找到了解决这些问题的方法。我的重点是使用内置的编辑表,但是您可以只使用普通的datatable,列可以包含输入文本字段。那么你就不必担心我上面问题中的大部分问题了。如果您需要在编辑视图和非编辑视图之间切换,那么我仍然不知道如何完全修复它,除了在您的文件中有两个带有呈现标记的数据表外,但是您正在复制表一个带有输入文本字段,另一个带有输出文本字段,这并不是最好的方法。

    我更新到primefaces 5,并修复了问题3,然后为了解决问题1,我必须将async=“true”添加到p:ajax中,现在它不会在单击保存后尝试运行ajax。既然ajax调用是异步的,我需要彻底地测试这一点。
     <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()}"/>