1. Первый способ (описан в Seam HttpServlet + injected context
variable)
создать class SeamServletAdapter extends HttpServlet
и в service делать тоже самое.
Проблема в том, что не получилось достать объекты из контекста сима с
замапленными сервисами.
т.е. сам объект я достаю, но все сервисы (которые описаны внутри Seam
компонента с помощью @In) равны null
2. Второй способ
Создать Seam action (flasheditor) и в методе getFontData написать:
ByteArrayOutputStream os = new ByteArrayOutputStream();
в os тем же способом записать байты шрифта
и вернуть os.toString()
флешу сказать - бери данные со страницы fontdata.seam?font=fontname
сама страница:
<f:view contentType="application/octet-stream"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:s="http://jboss.com/products/seam/taglib">
<h:outputText value="#{flasheditor.getFontData}" />
</f:view>
Шрифт качается, но содержит в себе данные, по размеру в 2 раза больше,
чем оригинал...
Оказалось - это из-за того, что toString как-то конвертит байты.
Пытался вернуть os.toByteArray() - т.к. данные содержат три нуля
подряд, данные обрывались
пытался ставить разные encoding - не помогло ;(
Возможно, это тоже решение задачи, если разобраться как вернуть на
страницу байты и не сконвертированную строку.
3. Третий способ
на странице сделал кнопку
<s:button action="#{flasheditor.getFontData}" value="test"/>
которая сгенерировала мне такой урл (правда пока без fontname=name),
но не суть
получилось что-то вроде
/myproject/homepageaction.seam?actionMethod=homepageaction.xhtml
%3Aflasheditor.getFontData2&cid=1';
далее в самом методе удаляем всё нафиг и пишем
FacesContext context = FacesContext.getCurrentInstance();
HttpServletResponse response = (HttpServletResponse)
context.getExternalContext().getResponse();
response.reset();
response.setContentType("application/octet-stream");
OutputStream os = response.getOutputStream();
bos = new BufferedOutputStream(os);
bos.write(данные);
bos.flush();
bos.close();
context.responseComplete();
Всё!!! Работает!
Скачивается нужный шрифт! И никаких лишних символов!
Осталось только передать имя шрифта через параметр, но это фигня по
сравнению с тем, что пришлось пережить...
BR