2015-01-08 6 views
1

Я использую Struts2 в приложении. Мне нужно загрузить файл excel (форматы .xlsx и .xls). Это правильно работает в IE, но в Chrome он показывает ошибкудублирующиеся заголовки, полученные с сервера с помощью Struts2

«Повторяющиеся заголовки, полученные от сервера»

Я использую кавычки перед именем файла («< Имя файла»). Тем не менее он не работает в хроме. Ниже приведены фрагменты кода, используемые в моем приложении.

struts.xml

<action name="*Excel" method="{1}" class="ReportUtilityAction"> 
    <result name="success" type="stream"> 
     <param name="contentType">application/vnd.ms-excel</param> 
     <param name="inputName">fileInputStream</param> 
     <param name="bufferSize">1024</param> 
    </result> 
</action> 

Я упомянул контент-расположение в классе действий, как

static final private String Content = "Content-Disposition"; 

HttpServletResponse response = this.getHttpResponse(); 
response.setHeader(Content, "attachment;filename='Export.xlsx';"); 
+0

Если вы используете результат 'stream', используйте его и для установки заголовка содержимого. –

+0

@AleksandrM Я использовал размещение контента через класс действия. это то, что вы попросили меня попробовать? Я не могу тебя достать. Не могли бы вы объяснить подробно? – Anju

+0

Результат 'stream' уже устанавливает этот заголовок, и вы добавляете еще одну, отсюда эту ошибку. Прочитайте документы о «потоке». –

ответ

1

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

<result name="success" type="stream"> 
    <param name="contentDisposition">attachment;filename="Export.xlsx";</param> 
    <param name="contentType">application/vnd.ms-excel</param> 
    <param name="inputName">fileInputStream</param> 
    <param name="bufferSize">1024</param> 
</result> 

Вы также можете иметь его параметризованный с помощью ${} обозначения, с соответствующим геттер в действии:

<param name="contentDisposition">attachment;filename="${filename}";</param> 
public String getFilename(){ ... } 
+0

Я пробовал это. все равно я получаю ту же ошибку в chrome. – Anju

+0

Вам явно нужно удалить «response.setHeader (Content,« attachment; filename = 'Export.xlsx »;);' part from your action –

+0

Да, я удалил его. – Anju

0

Ошибка означает, что поле заголовка устанавливается в два раза; вы должны увидеть это в трассировке HTTP. Таким образом, вам необходимо узнать , почему его установить в два раза.