Jsf 2 行编辑在datatable primefaces中不起作用
在编辑datatable值的过程中,这些值不会在屏幕和侦听器方法中更新。侦听器方法: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
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中)
其中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()...
}