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}" />
See also:
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…