Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.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
Jsf 2 行编辑在datatable primefaces中不起作用_Jsf 2_Primefaces_Primefaces Extensions - Fatal编程技术网

Jsf 2 行编辑在datatable primefaces中不起作用

Jsf 2 行编辑在datatable primefaces中不起作用,jsf-2,primefaces,primefaces-extensions,Jsf 2,Primefaces,Primefaces Extensions,在编辑datatable值的过程中,这些值不会在屏幕和侦听器方法中更新。侦听器方法: public void onEdit(RowEditEvent event) throws ClassNotFoundException, SQLException { Employee e=(Employee) event.getObject(); name=e.getName(); department=e.getDepartment(); salary=e.getSalar

在编辑datatable值的过程中,这些值不会在屏幕和侦听器方法中更新。侦听器方法:

public void onEdit(RowEditEvent event) throws ClassNotFoundException, SQLException
{
    Employee e=(Employee) event.getObject();
    name=e.getName();
    department=e.getDepartment();
    salary=e.getSalary();
    place=e.getPlace();
          ......
           ..... update query
}
我只获取选定对象及其值,而不获取更新后的值

这是我的datatable XHTML:

<h:form id="form">
    <p:growl id="messages" showDetail="true" />

    <p:dataTable var="e" value="#{employees.eList}" id="elist1"
        editable="true">
        <f:facet name="header">
        In-Cell Editing
    </f:facet>

        <p:ajax event="rowEdit" listener="#{employees.onEdit}"
            update=":form:messages" />
        <p:ajax event="rowEditCancel" listener="#{employees.onCancel}"
            update=":form:messages" />

        <p:column headerText="name" style="width:30%">
            <p:cellEditor>
                <f:facet name="output">
                    <h:outputText value="#{e.name}" />
                </f:facet>
                <f:facet name="input">
                    <h:inputText value="#{e.name}" style="width:100%" />
                </f:facet>
            </p:cellEditor>
        </p:column>

        <p:column headerText="department" style="width:20%">
            <p:cellEditor>
                <f:facet name="output">
                    <h:outputText value="#{e.department}" />
                </f:facet>
                <f:facet name="input">
                    <h:inputText value="#{e.department}" style="width:100%"
                        label="department" />
                </f:facet>
            </p:cellEditor>
        </p:column>

        <p:column headerText="salary" style="width:20%">
            <p:cellEditor>
                <f:facet name="output">
                    <h:outputText value="#{e.salary}" />
                </f:facet>
                <f:facet name="input">
                    <h:inputText value="#{e.salary}" style="width:100%" label="salary" />
                </f:facet>
            </p:cellEditor>
        </p:column>

        <p:column headerText="place" style="width:20%">
            <p:cellEditor>
                <f:facet name="output">
                    <h:outputText value="#{e.place}" />
                </f:facet>
                <f:facet name="input">
                    <h:inputText value="#{e.place}" style="width:100%" label="place" />
                </f:facet>
            </p:cellEditor>
        </p:column>



        <p:column style="width:6%">
            <p:rowEditor />
        </p:column>

    </p:dataTable>

</h:form>
在你的

<p:ajax event="rowEdit" listener="#{employees.onEdit}"
            update=":form:messages" />

您只更新messagess,而不更新datatable本身。尝试以下操作:
update=“:form:messages,:form:elist1”

这对我很有用

您的bean必须实现接口可序列化。这就是错误消息所说的

另一个问题是,您总是通过getEList返回新列表。您可以在某种init方法中加载ArayList,该方法将具有注释
@PostConstruct

@PostConstruct
public void init() {
       //code from getElist()...
}
你的getter应该是只返回eList的经典getter。 这样,您可以在创建视图时加载列表。在您的情况下,每次更新都会再次加载列表,这是一种糟糕的做法。不要在getter中获取数据。编辑不适用于您,因为您每次返回新列表时都会丢失更新的值。

我认为您:

  • 需要在p:dataTable标记上定义rowKey属性
  • 或者实现一个实现SelectableDataModel的数据模型(输入到datatable中)
rowKey属性选项所需的工作量最少。例如:


其中e.name是数据表中每个项的标识符。它也应该是该对象的唯一值。(像一个id)

它可能会帮助某人。我有一个类似的问题,我在互联网上尝试了所有可能的事情。最终我放弃了,但后来不小心修好了。问题是我在.xhtml中使用了多个,并且由于某种原因没有传播这些更改。
希望它能帮助别人

你使用什么范围?也许你可以给我一些数据表代码?@Darka hi我添加了数据表代码我更改了代码,但没有更改你使用的范围是什么?它是视图范围的bean吗?你调试好了吗?是否输入此方法?我正在使用请求范围。我用您的代码更新了datatable组件,但它仍然不工作。为什么使用请求范围而不是视图范围?你有具体的理由吗?我建议的此更新在请求范围内没有任何意义。我将范围更改为view..但存在异常。我将异常和我的托管bean粘贴到我的questionwell异常更正中…但是我没有得到更新的值,仍然得到旧的值Sok,再一次:执行是否进入方法onEdit?你们检查过了吗?是的,它进入了onEdit方法,我要说的是,event.getObject()方法返回旧对象未更新oneI'va更新了我的答案。一开始我没有注意到问题出在你的geteList()上。我很高兴我帮了忙。我不明白他(或其他人)为什么不应该使用视图范围bean?是的,你是对的,再想想,viewscoped应该没问题(从我的回答中删除)
<p:ajax event="rowEdit" listener="#{employees.onEdit}"
            update=":form:messages" />
@PostConstruct
public void init() {
       //code from getElist()...
}