Как получить InputStream общедоступного ресурса веб-контента? - PullRequest
1 голос
/ 19 января 2012

У меня есть коллекция изображений, упакованных в мою WAR, и я изображаю их в <p:dataGrid> с использованием <p:graphicImage>Изображения находятся в папке /resources/icons.Я хочу иметь возможность выбрать изображение и сохранить копию этого изображения на диске при отправке.

Как это можно сделать?Как я могу получить ссылку (InputStream или что-то еще) на это изображение?

1 Ответ

2 голосов
/ 20 января 2012

Учитывая эту структуру папок,

YourProject
 |-- src
 |    `-- com
 |         `-- example
 |              `-- BackingBean.java
 |-- WebContent
 |    |-- META-INF
 |    |-- WEB-INF
 |    |-- resources
 |    |    `-- icons
 |    |         `-- foo.png
 |    `-- foo.xhtml
 :

Вы можете получить его либо ExternalContext#getResourceAsStream(), который принимает путь относительно веб-контента:

ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
InputStream input = externalContext.getResourceAsStream("/resources/icons/foo.png");
// ...

Или Resource#getInputStream(), где Resource получается из ResourceHandler#createResource(), который принимает /resources -относительный путь:

ResourceHandler resourceHandler = FacesContext.getCurrentInstance().getApplication().getResourceHandler();
InputStream input = resourceHandler.createResource("icons/foo.png").getInputStream();
// ...

Что касается выбора изображения и его обхода, просто сделайте что-то вроде следующего:

<h:graphicImage name="icons/foo.png">
    <f:ajax event="click" listener="#{bean.setImage(component.name)}" />
</h:graphicImage>
<h:graphicImage name="icons/bar.png">
    <f:ajax event="click" listener="#{bean.setImage(component.name)}" />
</h:graphicImage>
<h:commandButton value="submit" action="#{bean.saveImage}" />

Смотри также:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...