如何解决Ajax不会更新p:datatable
我需要直接在List中做一些工作,这很容易做到,但是当我通过ajax更新p:datatable时,没有结果,但是在同一代码中,网格外部的控件被更新了。此外,当我通过p:commandbutton运行相同的命令时,数据表会同时更新。
实体Bean
public class Data {
String id;
String title;
double qty;
double rate;
double total;
public Data(String id,String title,double qty,double rate,double total) {
this.id=id;
this.title=title;
this.qty=qty;
this.rate=rate;
this.total=total;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public double getQty() {
return qty;
}
public void setQty(double qty) {
this.qty = qty;
}
public double getRate() {
return rate;
}
public void setRate(double rate) {
this.rate = rate;
}
public double getTotal() {
return total;
}
public void setTotal(double total) {
this.total = total;
}
}
Managed Bean
@Named ("DataMB")
@SessionScoped
public class DataMB implements Serializable {
private List<Data> testD;
public List<Data> getTestD() {
return testD;
}
public void setTestD(List<Data> testD) {
this.testD = testD;
}
public DataMB () {
testD = new ArrayList<>();
testD.add(new Data("Item 1","Test Item No. 1",11,20,220));
testD.add(new Data("Item 2","Test Item No. 2",10,40,400));
testD.add(new Data("Item 3","Test Item No. 3",3,60,180));
testD.add(new Data("Item 4","Test Item No. 4",21,12,252));
}
public void onCellEdit(int row) {
testD.get(row).total=testD.get(row).qty*testD.get(row).rate;
System.out.println("Total @ Row No. " + testD.get(row).total);
PrimeFaces.current().ajax().update("frm:detTable");
}
}
html
<p:commandButton value="Update Grid" action="#{DataMB.onCellEdit(0)}" />
<p:dataTable var="result" id="detTable" widgetVar="detTable"
value = "#{DataMB.testD}"
paginator = "false"
scrollable="true" rowIndexVar="rowindex" scrollHeight="344" scrollWidth="auto"
scrollRows="9" liveScroll="false"
editable = "true"
editMode = "cell"
>
<p:ajax event="cellEdit" listener="#{DataMB.onCellEdit(rowindex)}" update="detTable" />
<p:column width="45">
<f:facet name="header">
<h:outputText value="id" />
</f:facet>
<p:cellEditor>
<f:facet name="output"><h:outputText value="#{result.id}" /></f:facet>
<f:facet name="input"><p:inputText value="#{result.id}" style="width:95%;"/> </f:facet>
</p:cellEditor>
</p:column>
<p:column width="45">
<f:facet name="header">
<h:outputText value="title" />
</f:facet>
<p:cellEditor>
<f:facet name="output"><h:outputText value="#{result.title}" /></f:facet>
<f:facet name="input"><p:inputText value="#{result.title}" style="width:95%;"/> </f:facet>
</p:cellEditor>
</p:column>
<p:column width="45">
<f:facet name="header">
<h:outputText value="qty" />
</f:facet>
<p:cellEditor>
<f:facet name="output"><h:outputText value="#{result.qty}" /></f:facet>
<f:facet name="input"><p:inputText value="#{result.qty}" style="width:95%;"/> </f:facet>
</p:cellEditor>
</p:column>
<p:column width="45">
<f:facet name="header">
<h:outputText value="rate" />
</f:facet>
<p:cellEditor>
<f:facet name="output"><h:outputText value="#{result.rate}" /></f:facet>
<f:facet name="input"><p:inputText value="#{result.rate}" style="width:95%;"/> </f:facet>
</p:cellEditor>
</p:column>
<p:column width="45">
<f:facet name="header">
<h:outputText value="total" />
</f:facet>
<p:cellEditor>
<f:facet name="output"><h:outputText value="#{result.total}" /></f:facet>
<f:facet name="input"><p:inputText value="#{result.total}" style="width:95%;"/> </f:facet>
</p:cellEditor>
</p:column>
</p:dataTable>
尽管我知道可以在Entity level bean上进行计算,但是,我给出了一个简单的示例来说明我需要在动态表中进行一些计算。
请提出建议。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。