Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何正确使用a4j:mediaOutput显示图像?_Java_Jsf_Richfaces - Fatal编程技术网

Java 如何正确使用a4j:mediaOutput显示图像?

Java 如何正确使用a4j:mediaOutput显示图像?,java,jsf,richfaces,Java,Jsf,Richfaces,使用下面的代码,我无法在网页中获取图像。我不确定我是否以正确的方式理解了文档,并且我无法找到此代码的任何问题 BEAN @ManagedBean(name = "imageBean") @RequestScoped public class ImageBean { public void paint(OutputStream os, Object data) throws IOException { BinaryContent content = (BinaryConte

使用下面的代码,我无法在网页中获取图像。我不确定我是否以正确的方式理解了文档,并且我无法找到此代码的任何问题

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(image, "jpg", os);
    }
}
public void paint(OutputStream os, Object data) throws IOException {
    String id = (String) data;
    BinaryContent content = (BinaryContent) getContentById(id);
    os.write(content.getContent());
}
页面

<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>

没有可用的消息。
...
图像数据

如果将来有人会遇到同样的问题,以下是解决方案:

我放入
value
属性的
content
是一个保存图像二进制数据的对象。因为它是在URL中序列化的,所以长度太大,无法工作。您必须传递一些
id
并在paint方法中获取对象

示例

<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>

ImageBean使用@SessionScope或@ApplicationScope