0

使用 PrimeFaces,我成功地生成了动态生成的图像并将其显示在 p:graphicImage 中,但是 selectOneListbox 没有显示由相同代码生成的图像。

JSF:

<p:selectOneListbox id="imgListBox" value="#{Bean.selectedimg}" var="img" style="height:600px; width: 400px">
    <f:selectItems value="#{Bean.availableimgs}" var="img" itemLabel="#{img.imgName}" itemValue="#{img}" />

    <p:column>
        <p:graphicImage value="#{img.picture}" alt="#{img.imgFileName}"/>
    </p:column>

    <p:column>
        <p:outputLabel id="imgNameLabel" value="#{img.imgName}"/>
    </p:column>
</p:selectOneListbox>

豆:

private StreamedContent Picture;

public StreamedContent getPicture() throws IOException {
    if (Picture == null) {
        ...
        ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
        ImageIO.write(im, "png", byteStream);
        // ImageIO.write(im, "png", new File(String.format("/home/user/Desktop/IMG/%s.png", imgFile.getName())));
        this.Picture = new DefaultStreamedContent(new ByteArrayInputStream(byteStream.toByteArray()), "image/png");
        return this.Picture;
    }
}

所有这一切都是替代文字。将图像转储到注释行中的文件中可以正常工作。将返回的 StreamedContent 对象转储到标签中也可以正常工作并显示其字符串表示形式:

org.primefaces.model.DefaultStreamedContent@47afcfac
org.primefaces.model.DefaultStreamedContent@1b43fbba

等等。图像 src 标记的填充似乎也与上​​面的工作单图像类似:

/testJSF/faces/javax.faces.resource/dynamiccontent.properties?ln=primefaces&amp;pfdrid=pfdrid_d905ac48-0fb4-4d2c-8282-9c84a714a92c

但在我可以访问的任何浏览器中都没有图像(Epiphany、IE9 32/64bit、FF13 Linux、FF21 Win7)

尝试使列表工作,我注意到 NetBeans 总是通过添加 import javax.enterprise.context.SessionScoped和页面工作(图形除外)为@SessionScoped bean 注释“固定导入”。PrimeFaces 演示示例中的 bean 通过 faces-config.xml 作为请求范围注入。如果我将 @RequestScoped 注释与import javax.faces.bean.RequestScoped; 那么与 bean 相关的任何事情都不会起作用。此外,如果我将 @SessionScoped 注释的导入更改为javax.faces.bean.SessionScoped ,那么也不会起作用。谁能解释应该在支持 PrimeFaces JSF 的 bean 上使用哪些注释以及使用哪些导入,因为这对于像我这样的菜鸟来说太混乱了?

最糟糕的是,简单的 graphicsImage 仅适用于 @SessionScoped bean 导入javax.enterprise.context.SessionScoped一次。如果我刷新页面,那么图像将会消失(实际的 URL 会改变,旧的 URL 不会有任何东西),直到重复清理/构建,并且在刷新期间不会在调试器中重新输入方法调用。

我显然做错了什么。

4

0 回答 0