Нажмите кнопку Primefaces и загрузите отфильтрованные данные - PullRequest
0 голосов
/ 08 июня 2018

Что я хочу: нажмите кнопку и загрузите отфильтрованную таблицу данных (расположенную в другом файле xhtml) на основе параметра, используемого для расчета суммы, отображаемой в такой кнопке.

В index.jsf естьформа с 3 кнопками, которая отображает количество регистров в таблице, полученной при запросе к базе данных через класс контроллера:

<h:form id="kpiForm">
    <p:panel id="kpiPanel" >
        <p:button id="bt1" value="#{demandasController.amountX}" />
        <p:button id="bt2" value="#{demandasController.amountY}" />
        <p:button id="bt3" value="#{demandasController.amountZ}" outcome="/app/demandas/index" /> <!-- clicking this button loads the page with the datatable, but not filtered.
    </p:panel>
</h:form>

У класса контроллера есть свойства, которые возвращают значения количества (просто для краткости,Я покажу только методы, связанные с количеством X.):

public String getAmountX() {
    return LoadAmountX().toString();
}

//setter ommited

private List<Demandas> LoadAmountX() {
        List<Demandas> listAmountX = DemandasFacade.findAmountX();
        return listAmountX;
    }

На моем фасаде у меня есть:

public List<Demandas> findAmountX() {
        return (List<Demandas>) getEntityManager().createNamedQuery("Demandas.findAmountX", Demandas.class).getResultList();
    }

И в моем классе сущностей у меня есть именованные запросы:

@NamedQuery(name = "Demandas.findAmountX", query = "SELECT COUNT(d.id) FROM Demandas d WHERE d.situacao.idSituacao = 3"),

В datatable у меня есть столбец, который содержит значения для таких параметров:

<ui:composition>
<h:form id="DemandasListForm">    
    <p:panel id="PanelListForm" header="#{adeBundle.ListDemandasTitle}">

        <p:dataTable id="datalist"
                     value="#{demandasController.items}"
                     rowKey="#{item.id}"
                     var="item"
                     selection="#{demandasController.selected}"
                     filteredValue="#{demandasController.filteredDemandas}"
                     widgetVar="demandasTable">

            <!-- some columns ommited -->

            <p:column sortBy="#{item.id}" filterBy="#{item.id}" >
                <f:facet name="header">
                    <h:outputText value="id"/>
                </f:facet>
                <h:outputText value="#{item.id}"/>
            </p:column>    

            <p:column sortBy="#{item.status.status}" filterBy="#{item.status.status}" filterMatchMode="in" >
                <f:facet name="filter">
                    <p:selectCheckboxMenu label="Status" onchange="PF('demandasTable').filter()" >
                        <f:selectItems value="#{demandasController.statusListCombo}" />
                    </p:selectCheckboxMenu>
                </f:facet>
                <h:outputText value="#{item.status.status}"/>
            </p:column>    
        </p:dataTable>

    </p:panel>
</h:form>
</ui:composition>

Я пытался решить эту проблему, но я не знаю, как это сделать:

Можеткто-нибудь, пожалуйста, помогите мне?

1 Ответ

0 голосов
/ 27 июня 2018

После долгих исследований нашел простое решение с использованием JQuery:

В некоторых index.xhtml :

<ui:composition>
  <h:form id="kpiForm">
    <p:panel id="kpiPanel" >
      <p:commandButton value="filter 1" action="/app/index" oncomplete=" $('#MyFormID\\:MyDatatableID\\:BoxID\\:1').click(); PF('wv').filter();" />
      <p:commandButton value="filter 2" action="/app/index" oncomplete=" $('#MyFormID\\:MyDatatableID\\:BoxID\\:2').click(); PF('wv').filter();" />
      <p:commandButton value="filter 3" action="/app/index" oncomplete=" $('#MyFormID\\:MyDatatableID\\:BoxID\\:3').click(); PF('wv').filter();" />
    </p:panel>
  </h:form>
</ui:composition>

В еще.xhtml :

<!-- some code ommited -->
<ui:composition [...]>
  <h:form id="OutsideFormID">
    <p:panel id="MyPanelID" header="Some Title">

      <p:dataTable id="MyDatatableID"
    value="#{datatableController.items}"
    rowKey="#{item.id}"
    var="item"
    selection="#{datatableController.selected}"
    filteredValue="#{datatableController.filteredDemandas}"
    widgetVar="wv">

          <p:column id="MyColumnID" sortBy="#{item.status.statusName}" filterBy="#{item.status.statusName}" filterMatchMode="in" >
            <f:facet name="header">
                <h:outputText value="STATUS"/>
            </f:facet>
            <f:facet name="filter">
            <p:selectCheckboxMenu id="BoxID" widgetVar="BoxWV" label="status" onchange="PF('wv').filter()">
                <f:selectItems id="ComboID" value="#{datatableController.statusListCombo}" />
            </p:selectCheckboxMenu>
            </f:facet>
            <h:outputText value="#{item.status.statusName}"/>
        </p:column>
      </p:dataTable>
    </p:panel>
  </h:form>
</ui:composition>
...