Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/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
Primefaces 如何在数据表上禁用排序?_Primefaces_Primefaces Datatable - Fatal编程技术网

Primefaces 如何在数据表上禁用排序?

Primefaces 如何在数据表上禁用排序?,primefaces,primefaces-datatable,Primefaces,Primefaces Datatable,我有一个带有惰性数据模型和分页的数据表。我想在单击“搜索”按钮时禁用默认排序,并在单击“显示”按钮时再次启用它。所以我没有在我的xhtml文件中添加“sortBy”,而是在我的支持bean中动态设置它 一切正常,直到我点击标题,在降序和升序之间切换排序顺序。这意味着“搜索”按钮将禁用排序,“显示”按钮将在我未单击标题时正确启用排序。但是,当我单击标题,然后单击“搜索”按钮时,在LazyDataModel的load函数中,参数sortField的值是“date”,数据表将按日期排序,尽管“date

我有一个带有惰性数据模型和分页的数据表。我想在单击“搜索”按钮时禁用默认排序,并在单击“显示”按钮时再次启用它。所以我没有在我的xhtml文件中添加“sortBy”,而是在我的支持bean中动态设置它

一切正常,直到我点击标题,在降序和升序之间切换排序顺序。这意味着“搜索”按钮将禁用排序,“显示”按钮将在我未单击标题时正确启用排序。但是,当我单击标题,然后单击“搜索”按钮时,在LazyDataModel的
load
函数中,参数
sortField
的值是
“date”
,数据表将按日期排序,尽管“date”列没有明显着色

这是我的数据表:

<h:form id="contents-form">
...
    <p:dataTable id="tbl" widgetVar="tbl" var="msg" value="#{homeController.messagesModel}" lazy="true"
                 currentPageReportTemplate="سطر {startRecord}-{endRecord} از {totalRecords}"
                 paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
                 paginator="true" rows="10" rowsPerPageTemplate="5,10,15"
                 emptyMessage="هیچ پیامکی وجود ندارد."
                 selection="#{homeController.selectedMessages}" rowSelectMode="checkbox"
                 rowKey="#{msg.id}" filteredValue="#{homeController.filteredMessage}"
                 editable="true" editMode="cell"
                 style="width:100%" dir="rtl">

        <f:facet name="header">
            <p:commandButton value="خروجی" action="#{homeController.prepareExport}" icon="fa fa-save"
                             update="export-dlg-box" oncomplete="PF('exportDlgBox').show()"/>
            <p:commandButton value="واژگان" action="#{homeController.showListTermsChart}"
                             icon="fa fa-bar-chart" update="contents-form chart-form msgs"
                             oncomplete="PF('chartDlgBox').show()"/>
        </f:facet>

        <p:ajax event="cellEdit" listener="#{homeController.onCellEdit}" oncomplete="updateDescFilter()"/>

        <p:column selectionMode="multiple" style="width:16px;text-align:center"/>

        <p:column headerText="فرستنده" style="width:100px" filterBy="#{msg.sender.number}"
                  sortBy="#{msg.sender.number}">
            <p:commandLink action="#{homeController.setPhoneNumToShow(msg.sender)}" update="phone-form"
                           oncomplete="PF('phoneDlgBox').show()" styleClass="simple-command-link">
                <h:outputText value="#{msg.sender.number}"/>
            </p:commandLink>
        </p:column>

        <p:column headerText="گیرنده" style="width:100px" filterBy="#{msg.receiver.number}"
                  sortBy="#{msg.receiver.number}">
            <p:commandLink action="#{homeController.setPhoneNumToShow(msg.receiver)}" update="phone-form"
                           oncomplete="PF('phoneDlgBox').show()" styleClass="simple-command-link">
                <h:outputText value="#{msg.receiver.number}"/>
            </p:commandLink>
        </p:column>

        <p:column headerText="متن" sortBy="#{msg.text}">
            <h:outputText value="#{msg.getTrimmedText()}"/>
        </p:column>

        <p:column headerText="زمان" style="width:100px" filterBy="#{msg.date}" sortBy="#{msg.date}">
            <f:facet name="filter">
                <p:calendar pattern="yyyy-MM-dd">
                    <p:ajax event="dateSelect" oncomplete="PF('tbl').filter()" update="tbl"/>
                </p:calendar>
            </f:facet>
            <h:outputText value="#{msg.getJalaliDate()}"/>
        </p:column>

        <p:column headerText="منبع" style="width:70px" filterBy="#{msg.source}" sortBy="#{msg.source}">
            <f:facet name="filter">
                <p:selectOneMenu onchange="PF('tbl').filter()" style="width:30px; direction:ltr">
                    <f:selectItem itemLabel="همه" itemValue="#{null}" noSelectionOption="true"/>
                    <f:selectItems value="#{homeController.sources}" var="source"
                                   itemValue="#{source}" itemLabel="#{source}"/>
                </p:selectOneMenu>
            </f:facet>
            <h:outputText value="#{msg.source}"/>
        </p:column>

        <p:column headerText="توضیح" style="width:70px" filterBy="#{msg.description}"
                  sortBy="#{msg.description}">
            <f:facet name="filter">
                <p:selectOneMenu id="desc-filter-select" onchange="PF('tbl').filter()"
                                 style="width:30px; direction:ltr">
                    <f:selectItem itemLabel="همه" itemValue="#{null}" noSelectionOption="true"/>
                    <f:selectItems value="#{homeController.descriptions}" var="desc"
                                   itemValue="#{desc}" itemLabel="#{desc}"/>
                </p:selectOneMenu>
            </f:facet>
            <p:cellEditor>
                <f:facet name="output"><h:outputText value="#{msg.description}"/></f:facet>
                <f:facet name="input"> <p:inputText id="desc-input" value="#{msg.description}"
                                                    style="width:85%"/></f:facet>
            </p:cellEditor>
        </p:column>

        <p:column headerText="جزئیات" style="width:40px">
            <p:commandLink action="#{homeController.setMessageToShow(msg)}" ajax="true"
                           update="img-dlg-box" oncomplete="PF('imgDlgBox').show()">
                <i class="fa fa-blue fa-desktop"/>
            </p:commandLink>
        </p:column>

        <p:column headerText="مشاهده گفتگو" style="width:40px">
            <p:commandLink action="#{homeController.showConversation(msg.sender, msg.receiver)}"
                           ajax="true" update="conv-dlg-box" oncomplete="PF('convDlgBox').show()">
                <i class="fa fa-blue fa-wechat"/>
            </p:commandLink>
        </p:column>
    </p:dataTable>
</h:form>
以及备份bean中的
loadArchive
方法:

public void search() {
    if (this.selectedArchive == null) {
        FacesContext.getCurrentInstance().addMessage(null,
                new FacesMessage(FacesMessage.SEVERITY_ERROR, "خطا!", "لطفا یک مجموعه را انتخاب کنید"));
        return;
    }

    if ((this.textQuery != null && !this.textQuery.equals(""))
            || (this.selectedNodes != null && this.selectedNodes.length > 0)) {
        logger.info(String.format("searching '%s' in archive %d ...", this.textQuery, this.selectedArchive.getId()));
        List<String> selectedWords = this.getSelectedWords(this.selectedNodes);
        searchText(this.textQuery, selectedWords);
    } else {
        FacesContext.getCurrentInstance().addMessage(null,
                new FacesMessage(FacesMessage.SEVERITY_ERROR, "خطا!", "برای جست‌وجو هیچ متنی وارد نشده و هیچ واژه‌ای انتخاب نشده است."));
        return;
    }

    extractChoices();

    // Disable default sorting:
    DataTable table = (DataTable) FacesContext.getCurrentInstance().getViewRoot().findComponent(":contents-form:tbl");
    table.setValueExpression("sortBy", null);
    table.setValueExpression("sortOrder", null);
}
public void loadArchive() {
    if (this.selectedArchive == null) {
        FacesContext.getCurrentInstance().addMessage(null,
                new FacesMessage(FacesMessage.SEVERITY_ERROR, "خطا!", "لطفا یک مجموعه را انتخاب کنید"));
        return;
    }
    this.messagesModel = new LazyMessageModel(this.selectedArchive, true, this.messageService);

    extractChoices();

    // Enable default sorting:
    FacesContext context = FacesContext.getCurrentInstance();
    ExpressionFactory ef = context.getApplication().getExpressionFactory();
    DataTable table = (DataTable) context.getViewRoot().findComponent(":contents-form:tbl");
    ValueExpression sortVe = ef.createValueExpression(context.getELContext(), "#{msg.date}", Message.class);
    table.setValueExpression("sortBy", sortVe);
    table.setSortOrder("descending");

    logger.info(String.format("archive %d loaded", (this.selectedArchive.getId())));
}
规格:

  • Primefaces 6.2
  • JSF2.2.14
  • Java 1.8

    • 我终于找到了一个干净的解决方案!单击“搜索”按钮后,除了设置
      sortBy
      null外,我还必须重置表:


      在服务器中禁用排序方式真的很重要吗?否则你可以用CSS@Kukeltje我不想永久禁用排序。我只想禁用默认排序。我怎么能仅仅通过CSS来实现呢?我认为使用CSS我可以禁用排序按钮。但是我不能告诉datatable按我的顺序而不是按任何列对行进行排序。那么我完全不明白你的问题。你似乎在试图解决一些会产生问题的事情,而这些问题反过来你也在试图解决。这听起来像是一个@Kukeltje感谢你介绍这个问题!真有趣!好啊我的第一个问题(x)是:“我想告诉datatable在单击搜索按钮时不要按任何列对行进行排序。在单击显示按钮时不要按日期排序。”当然,我指的是默认排序。显示表格后,用户可以通过单击标题按任意列进行排序。我会很高兴任何前端或后端解决方案,解决我的问题!只需告诉
      messagesModel
      按下了哪个按钮,然后根据该按钮进行排序。
      public void search() {
          if (this.selectedArchive == null) {
              FacesContext.getCurrentInstance().addMessage(null,
                      new FacesMessage(FacesMessage.SEVERITY_ERROR, "خطا!", "لطفا یک مجموعه را انتخاب کنید"));
              return;
          }
      
          if ((this.textQuery != null && !this.textQuery.equals(""))
                  || (this.selectedNodes != null && this.selectedNodes.length > 0)) {
              logger.info(String.format("searching '%s' in archive %d ...", this.textQuery, this.selectedArchive.getId()));
              List<String> selectedWords = this.getSelectedWords(this.selectedNodes);
              searchText(this.textQuery, selectedWords);
          } else {
              FacesContext.getCurrentInstance().addMessage(null,
                      new FacesMessage(FacesMessage.SEVERITY_ERROR, "خطا!", "برای جست‌وجو هیچ متنی وارد نشده و هیچ واژه‌ای انتخاب نشده است."));
              return;
          }
      
          extractChoices();
      
          // Disable default sorting:
          DataTable table = (DataTable) FacesContext.getCurrentInstance().getViewRoot().findComponent(":contents-form:tbl");
          table.setValueExpression("sortBy", null);
          table.setValueExpression("sortOrder", null);
      }
      
      public void loadArchive() {
          if (this.selectedArchive == null) {
              FacesContext.getCurrentInstance().addMessage(null,
                      new FacesMessage(FacesMessage.SEVERITY_ERROR, "خطا!", "لطفا یک مجموعه را انتخاب کنید"));
              return;
          }
          this.messagesModel = new LazyMessageModel(this.selectedArchive, true, this.messageService);
      
          extractChoices();
      
          // Enable default sorting:
          FacesContext context = FacesContext.getCurrentInstance();
          ExpressionFactory ef = context.getApplication().getExpressionFactory();
          DataTable table = (DataTable) context.getViewRoot().findComponent(":contents-form:tbl");
          ValueExpression sortVe = ef.createValueExpression(context.getELContext(), "#{msg.date}", Message.class);
          table.setValueExpression("sortBy", sortVe);
          table.setSortOrder("descending");
      
          logger.info(String.format("archive %d loaded", (this.selectedArchive.getId())));
      }
      
      public void search() {
          // Do something ...
          DataTable table = (DataTable) FacesContext.getCurrentInstance().getViewRoot().findComponent(":contents-form:tbl");
          table.reset();
          table.setValueExpression("sortBy", null);
      }