Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Как приаттачить xml в runtime в бине jsf


Автор: VGrinder 9.3.2011, 19:32
Здравствуйте. Помогите решить такую проблему:

есть бин, в котором есть такого вида экшн:

public void action() throws IOException {
String myXml = getXml();
ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
HttpServletResponse response = (HttpServletResponse) externalContext.getResponse();
PrintWriter writer = response.getWriter();
response.setContentType("text/xml");
response.setHeader("Content-Disposition", "attachment; filename=my.xml");
writer.print(myXml);
}

есть страница, на которой следующего вид кнопка:

<h:commandLink id="btn" value="button" action="#{model.action}" target="_blank" >
</h:commandLink>

Экшн отрабатывает и предлагает сохранить файл, что я и делаю. Но проблема в том что в полученном xml присутствует ненужная мне информация:

<html>
<head>
...
</head>
cодержимое моего my.xml
</html>

Можно ли как-нибудь избежать подобной структуры а оставить только my.xml?

Автор: MisterCleric 10.3.2011, 10:31
Привет.
Попробуй взять у response OutputStream и записать в него байты твоего XML.

Добавлено через 1 минуту и 7 секунд
Файл сам по себе - это не текст, а набор байт. Вот ты и должен браузеру сказать о том, что ты ему гонишь файл, а не простой response

Автор: VGrinder 10.3.2011, 12:03
MisterCleric, спасибо. Сначала вываливался эксепшн, говоря "servlet response already use stream, writer not possible", но погуглив удалось избавиться от этой проблемы с помощью FacesContext.getCurrentInstance().responseComplete();

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)