| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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(); |