Reputation: 2109
I have a collection of images packaged in my WAR and I depict them in a <p:dataGrid>
using <p:graphicImage>
. The images are located in the /resources/icons
folder. I want to be able to select an image and save a copy of this image to disk on submit.
How can this be done? How can I get a reference (InputStream
or whatever) to this image?
Upvotes: 1
Views: 2092
Reputation: 1109272
Given this folder structure,
YourProject |-- src | `-- com | `-- example | `-- BackingBean.java |-- WebContent | |-- META-INF | |-- WEB-INF | |-- resources | | `-- icons | | `-- foo.png | `-- foo.xhtml :
You can get it by either ExternalContext#getResourceAsStream()
which takes webcontent-relative path:
ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
InputStream input = externalContext.getResourceAsStream("/resources/icons/foo.png");
// ...
Or by Resource#getInputStream()
wherein Resource
is obtained from ResourceHandler#createResource()
which takes a /resources
-relative path:
ResourceHandler resourceHandler = FacesContext.getCurrentInstance().getApplication().getResourceHandler();
InputStream input = resourceHandler.createResource("icons/foo.png").getInputStream();
// ...
As to selecting the image and passing its path around, just do something like as follows:
<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}" />
Upvotes: 2