【问题标题】:p:dataTable clearFilters() after creating new row and delete it, and try to add new one it didn't added it edit last row in the datatablep:dataTable clearFilters() 创建新行并将其删除后,尝试添加未添加的新行 编辑数据表中的最后一行
【发布时间】:2017-02-02 12:38:47
【问题描述】:

当我尝试删除数据表中的现有行时,它已成功删除。但是,一旦我尝试在同一会话中添加新行,它会编辑表中的最后一行,但是它已经添加到列表中。

<p:dataTable id="AllData" var="itemTypeVar" value="#{itemTypeBean.itemTypesList}"  sortBy="#{itemTypeVar.itemTypeId}"
       editable="true"  paginator="#{common.paginator}" rows="#{common.rows}"  
       paginatorTemplate="#{common.paginatorTemplate}"  
       rowsPerPageTemplate="#{common.rowsPerPageTemplate}" 
       paginatorPosition="#{common.paginatorPosition}" styleClass="sClass ui-datatable-hor-scroll" 
       widgetVar="allData">  

    <p:column  headerText="#{docBundle.delete}" style=" height: auto;width:60px;text-align: center;">

        <p:commandLink action="#{itemTypeBean.delete(itemTypeVar)}" update=":Form_Data:AllData :Form_Mesages"   oncomplete="PF('allData').clearFilters()" />

        <p:commandButton actionListener="#{itemTypeBean.addRecord}" id="add" value= "#{docBundle.add}"  update=":Form_Data :Form_Mesages"  style="margin-top: 5px;" oncomplete="jQuery('.ui-datatable-data tr').last().find('span.ui-icon-pencil').each(function(){jQuery(this).click()}); " />  

豆子:

public void delete(InvStpItemType deleted) {
        RequestContext context = RequestContext.getCurrentInstance();
        itemStpTypeCurrent = new InvStpItemType();

        itemStpTypeCurrent = deleted;
        try
        {
            if (itemStpTypeCurrent.getItemTypeId() != 0) {
                invStpItemTypeFacade.remove(deleted);
                 itemTypesList.remove(itemStpTypeCurrent);
                Messages.deleteSuccMsg(this.getLanguage());
            } else {
                itemTypesList.remove(itemStpTypeCurrent);
            }
        }
        catch(Exception ex)
        {
            Messages.errorMsg(getLang(), "canNotDeletedUsedByItems");
        }
}


    public void addRecord() {
        if (!addRecord) {
            addRecord = true;
            itemStpTypeCurrent = new InvStpItemType();
            itemStpTypeCurrent.setActive("A");
            itemTypesList.add(itemStpTypeCurrent);
            Utilities.getLastPagination(":Form_Data:AllData");
        }
        else{  Utilities.getLastPagination(":Form_Data:AllData");}
    }

【问题讨论】:

  • bean 的作用域是什么?当您使用 action 而不是 actionlistener 时,remove 看起来像一个非 ajax 调用。同时发布数据表代码
  • 范围是 ViewScoped .. 好的,我会编辑它
  • @MaciejKowalski:请停止做出这种假设和建议。 “当您使用 action 而不是 actionlistener 时,remove 看起来像一个非 ajax 调用。” action 与 ajax 和 actionListener 一样好用,尤其是(但不限于)PrimeFaces。另见stackoverflow.com/questions/3909267/…
  • @Kukeltje 这对我很有用

标签: jsf primefaces datatable ejb


【解决方案1】:

我从我的ْXHTML代码中删除了'oncomplete="PF('allData').clearFilters()"'并从我的ْBean代码中重置了数据表,它运行良好......如果你有更好的解决方案不要犹豫发布它。

 DataTable dataTable = (DataTable)FacesContext.getCurrentInstance().getViewRoot().findComponent(":Form_Data:AllData");
    dataTable.reset();

【讨论】:

    猜你喜欢
    • 2012-09-14
    • 1970-01-01
    • 1970-01-01
    • 2012-08-03
    • 1970-01-01
    • 2015-12-04
    • 1970-01-01
    • 1970-01-01
    • 2018-07-04
    相关资源
    最近更新 更多