Не работает экспорт Primefaces excel — не отображается диалоговое окно открытия / сохранения

#jsf #export #primefaces #xls #mojarra

#jsf #экспорт #primefaces #xls #mojarra

Вопрос:

Я пытаюсь экспортировать коллекцию dto в Excel с помощью primefaces, подобных этому (так же, как демонстрационная демонстрация primefaces, которая работает).

 <p:commandButton value="Export">
    <p:dataExporter type="xls" target="results" fileName="game_statistics" />
</p:commandButton>
  

Я наблюдал с помощью firebug, и он делает запрос, также ответ выглядит как содержимое файла, но диалоговое окно сохранения / открытия файла не появляется.
Я использую mojarra 2.1.1 и tomcat 6 для сервера приложений.

Ответ №1:

По <p:commandButton> умолчанию отправляется ajax-запрос. Вы не можете загружать файлы с помощью ajax. Ajax выполняется Javascript, но из-за ограничений безопасности Javascript не может принудительно сохранить диалог как и передать на него ответ ajax.

Вам нужно добавить ajax="false" в компонент:

 <p:commandButton value="Export" ajax="false">
  

Или просто используйте обычный <h:commandButton> :

 <h:commandButton value="Export">
  

Ответ №2:

Вложите его в <h:form>...</h:form> , и он будет работать, например:

 <h:form>
<p:commandButton value="Export">
    <p:dataExporter type="xls" target="results" fileName="game_statistics" />
</p:commandButton>
</h:form>
  

Ответ №3:

Primefaces не поддерживает динамические столбцы, если вы их используете (под динамическим столбцом я подразумеваю значения атрибутов динамического столбца). Вы можете использовать POI для обходного пути, но я не знаю, что именно вы пытаетесь сделать. Покажите нам какой-нибудь код. Какую версию Primefaces вы используете?

Комментарии:

1. Я использую poi-3.2-FINAL, poi-scratchpad-3.2-FINAL,primefaces-2.2.1, jsf-api-2.1.1-b01, isf-impl-2.1.1-b01. ….. code <p: значение CommandButton=»Экспорт»> <p: Тип dataExporter=»xls» цель =»результаты» Имя файла =»game_statistics» /> </p: CommandButton> …..{gamesTotalReportBean.gameTotalReports}» rendered=»#{gamesTotalReportBean.gameTotalReports != null}» paginator=»true» строки =»7″ paginatorTemplate=»{FirstPageLink} {PreviousPageLink} {CurrentPageReport} {NextPageLink} {LastPageLink}»> code

2. Пожалуйста, отредактируйте / обновите свой вопрос, добавив туда полный код с code formatting

Ответ №4:

У меня есть страница формы, и я хочу использовать фильтры из нее и применить некоторые проверки перед извлечением данных из управляемого компонента (репозитория jpa), когда я нажимаю commandButton , но его поведение dataExporter заключается в том, чтобы сразу экспортировать файл, а затем, если я нажму еще раз, я получу правильные результаты, посколькукомпонент уже работал с ним при первом действии…

Использование preProcessor опции dataExporter в качестве первого шага выполняет свою работу, но я знаю, что это неправильный способ сделать это (следует использовать для форматирования документа и т. Д.), Но я не нашел другого способа решить эту проблему (ps. мой случай предназначен только для экспорта данных страницы, а нерендеринг DataTable), есть ли у кого-нибудь альтернатива / решение для этого?

Комментарии:

1. Препроцессор никоим образом (на 100% уверен) не является решением для открытия (или нет) диалогового окна

2. «у кого-нибудь есть альтернатива / решение для этого?» звучит как вопрос… Относится к новому вопросу…

3. это та же ситуация, что и в вопросе, за исключением того, что часть компонента не работает должным образом … как я уже сказал, это работает, но это неправильно, поэтому я прошу альтернативу… Я все равно не получаю отрицательных голосов

4. Отрицательные голоса по нескольким причинам: 1: Нет кода для решения 2: Нет кода, связанного с вашей исходной проблемой, который не сработал, 3: Нет кода, связанного с исходным вопросом 4: не могу представить (частично из-за отсутствия кода), что это решение проблемы, 5: итакэто сложное в использовании решение для реализации для других 6: я бы не хотел, чтобы другие пытались реализовать это, поскольку это кажется очень сложным и, возможно, только что решило еще одну невидимую проблему, например, получив новое свежее развертывание..

5. как уже упоминалось, это та же ситуация, за исключением части компонента, поэтому у меня есть что-то вроде этого: <h:form prependId="false"> <p:commandButton update=":content:tableResult" ajax="false" action="#{bean.validateSearch()}" > <p:dataExporter target=":content:tableResult" pageOnly="true"/> </p:commandButton> </h:form> <h:form prependId="false"> <p:dataTable id="tableResult" value="#{bean.data}" rendered="false"> </h:form> это не работает, если только я не использую commandButton действие как preProcessor в dataExporter , это неправильный путь, но это поведение, которое я ожидал для кода выше.