The <h:graphicImage> renders an HTML "img" element
The images used in these examples comes from different sources. The ones stored locally in /resources folder are highlighted in the below figure:
Common/basic usage (I) - pointing an image via the name attribute (no library):
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html">
<h:head>
<title>JSF graphicImage examples</title>
</h:head>
<h:body>
<h:graphicImage
name="imgs/OmniFaces.png"/>
</h:body>
</html>
This produce the following HTML code:
<img
src="/JSFGraphicImageExamples/faces/javax.faces.resource/imgs/OmniFaces.png"
/>
Common/basic usage (II) - pointing an image via the name and library attributes:
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html">
<h:head>
<title>JSF graphicImage examples</title>
</h:head>
<h:body>
<h:graphicImage
library="default" name="imgs/OmniFaces.png"/>
</h:body>
</html>
This produce the following HTML code:
<img
src="/JSFGraphicImageExamples/faces/javax.faces.resource/imgs/OmniFaces.png?ln=default"
/>
Data flow in image:
More examples:
Add xmlns:pt="http://xmlns.jcp.org/jsf/passthrough" for pass-through attributes
Pointing an image via the
value attribute
<h:graphicImage value="#{resource['imgs/OmniFaces.png']}"/>
This produce the following HTML code:
<img
src="/JSFGraphicImageExamples/faces/javax.faces.resource/imgs/OmniFaces.png"
/>
Pointing an image via the url attribute
<h:graphicImage url="#{resource['imgs/OmniFaces.png']}"/>
This produce the following HTML code:
<img
src="/JSFGraphicImageExamples/faces/javax.faces.resource/imgs/OmniFaces.png"
/>
Pointing an image located
on the web
<h:graphicImage value="https://pbs.twimg.com/profile_images/606750829622751232/agAQx5KB_400x400.png"/>
<h:graphicImage url="https://pbs.twimg.com/profile_images/606750829622751232/agAQx5KB_400x400.png"/>
This produce the following HTML code:
<img
src="https://pbs.twimg.com/profile_images/606750829622751232/agAQx5KB_400x400.png"
/>
<img
src="https://pbs.twimg.com/profile_images/606750829622751232/agAQx5KB_400x400.png"
/>
Setting the width and
height of an image
<h:graphicImage
name="imgs/OmniFaces.png" height="70"
width="70"/>
This produce the following HTML code:
<img
src="/JSFGraphicImageExamples/faces/javax.faces.resource/imgs/OmniFaces.png"
height="70" width="70" />
Styling images with inner CSS
Use a map image
<h:graphicImage
name="imgs/OmniFaces.png" ismap="true" usemap="#omnifacesmap"/>
<map name="omnifacesmap">
<area
shape="rect" coords="0, 0, 37, 35"
href="http://showcase.omnifaces.org/" title='OmniFaces Showcase'/>
<area
shape="rect" coords="38, 0, 76, 35"
href="https://github.com/omnifaces/omnifaces" title='OmniFaces Source
Code'/>
<area
shape="rect" coords="0, 35, 38, 72"
href="http://omnifaces.org/docs/javadoc/current/" title='OmniFaces
API Documentation'/>
<area
shape="rect" coords="38, 35, 76, 72"
href="http://omnifaces.org/docs/vdldoc/current/" title='OmniFaces VDL
documentation'/>
</map>
This produce the following HTML code:
<img
src="/JSFGraphicImageExamples/faces/javax.faces.resource/imgs/OmniFaces.png"
usemap="#omnifacesmap" ismap="ismap" />
<o:graphicImage
name="imgs/OmniFaces.png" dataURI="true"/>
This produce the following HTML code:
<img
src="data:image/png;base64,iVBORw0KGgoAAAAN ... ASUVORK5CYII="
alt="" />
<o:graphicImage value="#{app.inputStreamImage}"/>
This produce the following HTML code:
<img
src="/JSFGraphicImageExamples/faces/javax.faces.resource/ApplicationBean_getInputStreamImage?ln=omnifaces.graphic&v=0"
alt="" />
Render InputStream (or byte[]) property with SVG
content as resource image via OmniFaces, <o:graphicImage>
<o:graphicImage
value="#{app.svgInputStreamImage}" type="svg"/>
This produce the following HTML code:
<img
src="/JSFGraphicImageExamples/faces/javax.faces.resource/
ApplicationBean_getSvgInputStreamImage_svg?ln=omnifaces.graphic&v=0" alt="" />
ApplicationBean_getSvgInputStreamImage_svg?ln=omnifaces.graphic&v=0" alt="" />
Render InputStream (or byte[]) property with SVG content as fragment
via OmniFaces, <o:graphicImage>
<o:graphicImage
value="#{app.svgInputStreamImage}" type="svg" fragment="svgView(viewBox(0,50,50,50))"/>
This produce the following HTML code:
<img
src="/JSFGraphicImageExamples/faces/javax.faces.resource/ApplicationBean_getSvgInputStreamImage_svg?
ln=omnifaces.graphic&v=0#svgView(viewBox(0,50,50,50))" alt="" />
ln=omnifaces.graphic&v=0#svgView(viewBox(0,50,50,50))" alt="" />
Render InputStream (or byte[]) property with SVG content as resource
image data URI
<o:graphicImage
value="#{app.svgInputStreamImage}" type="svg" dataURI="true"/>
This produce the following HTML code:
<img
src="data:image/svg+xml;base64,PD94bWwgdm...g0KPC9zdmc+DQo=" alt=""
/>
The dummy bean used for the above four examples is:
import java.io.InputStream;
import javax.inject.Named;
import javax.enterprise.context.ApplicationScoped;
import org.omnifaces.util.Faces;
@Named(value = "app")
@ApplicationScoped
public class ApplicationBean {
public
ApplicationBean() {
}
public
InputStream getInputStreamImage() {
return
Faces.getResourceAsStream("/resources/imgs/OmniFaces.png");
}
public
InputStream getSvgInputStreamImage() {
return
Faces.getResourceAsStream("/resources/imgs/OmniFaces.svg");
}
}
Note When not rendered as data URI, the InputStream
or byte[]
property must point to a stateless @ApplicationScoped bean (both JSF and
CDI scopes are supported).
Cross-origin CORS
requests for the element will not have the credentials flag set
<h:graphicImage url="e.g. dropbox link" pt:crossorigin="anonymous"/>
This can be useful per example if you have tainted
canvases. You may have an image in a canvas and try to save the canvas content
in local storage. Basically, post your images to a site that supports
cross-domain sharing (like dropbox.com) and set crossorigin to anonymous.
Complete source code on GitHub.
See also Mkyong.com.
More resources on Constantin Alin, ZEEF page.
GraphicImage in JSF Extension on JSF ShowCase ZEEF page.
See also Mkyong.com.
More resources on Constantin Alin, ZEEF page.
GraphicImage in JSF Extension on JSF ShowCase ZEEF page.
Niciun comentariu :
Trimiteți un comentariu