How to use a4j:mediaOutput correctly for displaying images?
Using the code below I can't get the image in the web page. I'm not sure if I understand the documentation in the right way and I'm not able to find any problem with this code.
BEAN
@ManagedBean(name = "imageBean")
@RequestScoped
public class ImageBean {
public void paint(OutputStream os, Object data) throws IOException {
BinaryContent content = (BinaryContent) data;
BufferedImage image = ImageIO.read(new ByteArrayInputStream(content.getContent()));
ImageIO.write(im开发者_开发问答age, "jpg", os);
}
}
PAGE
<rich:dataTable value="#{dataProviderBean.aoRequests}" var="item">
<f:facet name="noData">No messages are available.</f:facet>
...
<rich:column>
<f:facet name="header">Image data</f:facet>
<rich:list value="#{item.imageContents}" var="content">
<a4j:mediaOutput element="img" cacheable="false" session="false"
createContent="#{imageBean.paint}" value="#{content}" />
</rich:list>
</rich:column>
</rich:dataTable>
If someone will have the same problem in the future, here is the solution:
The content
I put into value
attribute is an object which holds binary data of a image. Because it is serialized in URL, the length is too big and it does not work. You have to pass some id
and fetch the object in the paint method.
Example
<rich:dataTable value="#{dataProviderBean.aoRequests}" var="item">
<f:facet name="noData">No messages are available.</f:facet>
...
<rich:column>
<f:facet name="header">Image data</f:facet>
<rich:list value="#{item.imageContents}" var="content">
<a4j:mediaOutput element="img" cacheable="false" session="false"
createContent="#{imageBean.paint}" value="#{content.id}" />
</rich:list>
</rich:column>
</rich:dataTable>
BEAN
public void paint(OutputStream os, Object data) throws IOException {
String id = (String) data;
BinaryContent content = (BinaryContent) getContentById(id);
os.write(content.getContent());
}
ImageBean use @SessionScoped or @ApplicationScope https://community.jboss.org/thread/168523
精彩评论