Добавление условия в целевой атрибут для p: dataExporter для экспорта двух таблиц данных на двух разных вкладках по одной за раз, чтобы превзойти в простых лицах - PullRequest
0 голосов
/ 25 октября 2018

У меня есть две радиокнопки и я использовал p: tabView с двумя вкладками в моей форме.При нажатии первого переключателя включается первая вкладка, а при нажатии второго переключателя включается вторая вкладка.В обеих вкладках есть одна дата.Я хочу экспортировать данные в формат Excel для обеих вкладок по одной.Для этого я использую p: dataExporter.Я сбит с толку, если условное выражение может быть добавлено в цель для p:dataExporter, поскольку для первой радиокнопки я должен указать идентификатор таблицы первой вкладки, а для второй радиокнопки - идентификатор второй таблицы табуляции.Как это может быть сделано ?Мой код такой:

<h:form id="form" target="_blank">
<p:blockUI block="form" trigger="cmdView">
    <p:graphicImage value="/resources/img/ajax-load.gif" />
</p:blockUI>
<p:panel header="#{text.form}">

    <h:panelGrid columns="5">
        <h:outputText for="console" value="SearchType" />

        <p:selectBooleanCheckbox id="isBrief" value="#{customerMB.brief}">
            <p:ajax listener="#{customerMB.unCheckDetail}"
                update="isDetail tabview"></p:ajax>
        </p:selectBooleanCheckbox>

        <h:outputText value="#{text.Brief} " />
        <p:selectBooleanCheckbox id="isDetail" value="#{customerMB.detail}">
            <p:ajax listener="#{customerMB.unCheckBrief}"
                update="isBrief tabview"></p:ajax>
        </p:selectBooleanCheckbox>
        <h:outputText value="#{text.Detail}" />
    </h:panelGrid>


    <p:commandButton id="cmdView" icon="fa fa-search-plus"
        value="#{text.View}" actionListener="#{customerMB.generateList}"
        process="@this" update="@form" />


    <p:commandButton id="cmdExcel" value="#{text.Excel}"
        disabled="#{empty customerMB.formList}" icon="fa fa-file-excel-o"
        ajax="false">
        <p:dataExporter type="xls" target="form:tabview:table1"
            fileName="form" postProcessor="#{customerMB.postProcessXLS}" />
    </p:commandButton>
</p:panel>
<p:tabView id="tabview" activeIndex="#{customerMB.activeTab}">
    <p:tab title="#{text.CustReportBrief}" id="tab1"
        disabled="#{customerMB.detail}">

        <p:dataTable id="table1" var="tblA" scrollable="true"
            resizableColumns="true" value="#{customerMB.List1}"
            rowIndexVar="rowSn" paginator="true">
            <p:column headerText="#{text.SNo}" width="50">
                <h:outputText value="#{tblA.sn}" />
            </p:column>

            <p:column headerText="#{text.MemberName}">
                <h:outputText value="#{tblA.customerName}" />
            </p:column>
            <p:column headerText="#{text.Address}">
                <h:outputText value="#{tblA.custAddress}" />
            </p:column>

        </p:dataTable>

    </p:tab>
    <p:tab title="#{text.CustReportDetail}" id="tab2"
        disabled="#{customerMB.brief}">

        <p:dataTable var="tblB" rowIndexVar="rowSn" scrollable="true"
            resizableColumns="true" value="#{customerMB.List2}" id="table2">
            <p:column headerText="#{text.SNo}" width="50px;">
                <h:outputText value="#{tblB.sn}" />
            </p:column>

            <p:column headerText="#{text.Name}">
                <h:outputText value="#{tblB.customerName}" />
            </p:column>
            <p:column headerText="#{text.Address}">
                <h:outputText value="#{tblB.custAddress}" />
            </p:column>
            <p:column headerText="#{text.Contact}">
                <h:outputText value="#{tblB.custContact}" />
            </p:column>
            <p:column headerText="#{text.Email}">
                <h:outputText value="#{tblB.custEmail}" />
            </p:column>



        </p:dataTable>

    </p:tab>
</p:tabView>
</h:form>

Ответы [ 2 ]

0 голосов
/ 28 октября 2018

Хорошо, я поступил по-своему, и это тоже просто.Я определил строковую переменную для хранения идентификатора таблицы в custmerMB и в соответствии с выбранным переключателем я установил значение в этой переменной.Код выглядит так:

private String tblToExport;

public String getTblToExport() {
    return tblToExport;
}

public void setTblToExport(String tblToExport) {
    this.tblToExport = tblToExport;
}

public void unCheckDetail() {

    if (isBrief == true) {
        tblToExport=":form:tabview:table1";

}

public void unCheckBrief() {

    if (isDetail == true) {
        tblToExport=":form:tabview:table2";

    } 
}

и код кнопки Excel:

<p:commandButton id="cmdExcel" value="#{text.Excel}"
    disabled="#{empty customerMB.formList}" icon="fa fa-file-excel-o"
    ajax="false">
    <p:dataExporter type="xls" target="#{customerMB.tblToExport}"
        fileName="form" postProcessor="#{customerMB.postProcessXLS}" />
</p:commandButton>
0 голосов
/ 28 октября 2018

Я сталкивался с этой проблемой раньше, я решил эту проблему с двумя не отображаемыми commandButton с dataExporter внутри и вызвал ее с помощью commandButton.

    <p:commandButton id="cmdExcel" value="#{text.Excel}"
        disabled="#{empty customerMB.formList}" icon="fa fa-file-excel-o"
        onstart="document.getElementById('btn1').click()" 
        oncomplete="document.getElementById('btn2').click()"/>
    <p:commandButton id="btn1" ajax="false" style="display: none;">
        <p:dataExporter target="table1" type="xls" fileName="table1"/>
    </p:commandButton>
    <p:commandButton id="btn2" ajax="false" style="display: none;">
        <p:dataExporter target="table2" type="xls" fileName="table2"/>
    </p:commandButton>
...