Jsf ajax不更新p:datatable

Jsf ajax不更新p:datatable,jsf,primefaces,Jsf,Primefaces,我需要直接在列表中做一些工作,这很容易完成,但当我通过ajax更新p:datatable时,它不会给出结果,但在相同的代码中,网格外的控件会被更新。此外,当我通过p:commandbutton运行相同的命令时,datatable会同时更新 实体Bean public class Data { String id; String title; double qty; double rate; double total; public Dat

我需要直接在列表中做一些工作,这很容易完成,但当我通过ajax更新p:datatable时,它不会给出结果,但在相同的代码中,网格外的控件会被更新。此外,当我通过p:commandbutton运行相同的命令时,datatable会同时更新

实体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;
    }   
}
豆角

@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");
    }
}
@Named(“DataMB”)
@会议范围
公共类DataMB实现了可序列化{
私有列表testD;
公共列表getTestD(){
返回testD;
}
公共空间设置标准(列表测试D){
this.testD=testD;
}
公共数据MB(){
testD=newarraylist();
试验D.添加(新数据(“项目1”、“试验项目编号1”、11、20、220));
试验D.添加(新数据(“项目2”,“试验项目编号2”,10,40,400));
试验D.添加(新数据(“项目3”、“试验项目编号3”、3、60、180”);
试验D.添加(新数据(“项目4”、“试验项目编号4”、21、12、252));
}
公共void onCellEdit(int行){
testD.get(row).total=testD.get(row).qty*testD.get(row).rate;
System.out.println(“总计@行编号“+testD.get(行).Total);
PrimeFaces.current().ajax().update(“frm:detTable”);
}
}
html


虽然,我知道可以在@Entity级别的bean中进行计算,但是,我制作了这个简单的示例来说明我需要在动态表中进行一些计算

请建议

<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>