【问题标题】:Unable to Display Image in p:graphicImage无法在 p:graphicImage 中显示图像
【发布时间】:2012-06-16 09:07:34
【问题描述】:

我有以下代码,我可以在 ui:repeat 部分看到图像,但是当我单击图像时,命令链接和 setPropertyActionListener 工作正常,但图像没有显示在所需的面板网格中。

<p:layoutUnit id="centre" position="center"  >
    <h:panelGrid id="test" columns="2" cellpadding="2" >
        <h:panelGroup>
            <div id="imageWrap" style="width:600px; height:400px; margin:auto; overflow:scroll; position:relative;">
                <p:graphicImage id="prodImage" value="#{imageController.image}" alt="unable to load image #{imageController.imageID}" />
            </div>
        </h:panelGroup>
    </h:panelGrid>
</p:layoutUnit>

<p:layoutUnit id="left" position="west" >
    <h:panelGrid  id="panelGrid3" columns="2" cellspacing="2" cellpadding="2">
        <ui:repeat id="repeat5" value="#{getData.imageThumbnail1}" var="imagesLst" varStatus="loop">
            <h:panelGroup>
                <p:commandLink update=":form:tabView:test" >
                    <f:setPropertyActionListener target="#{imageController.imageID}" value="#{imagesLst.imageID}" />
                    <p:graphicImage id="gi5" value="#{imagesStreamer.image}" alt="image not available" >
                        <f:param name="id" value="#{imagesLst.imageID}" />
                    </p:graphicImage>
                </p:commandLink>
            </h:panelGroup>
        </ui:repeat>
    </h:panelGrid>
</p:layoutUnit>

支撑豆

@ManagedBean
@SessionScoped
public class imageController implements Serializable {

    private String imageID;
    private StreamedContent sc;

    /** Creates a new instance of imageController */
    public imageController() {
    }

    public void setImageID(String imageID) {
        this.imageID = imageID;
        System.out.println("ImageController set == "+ this.imageID);
    }

    public String getImageID(){
        return imageID;
    }

    public StreamedContent getImage() {
        System.out.println("ImageController get == "+ this.imageID);
        if (imageID != null) {
            ByteArrayInputStream image = GetData.findImages(imageID);
            System.out.println("Passing Default Streamed Content");
            return new DefaultStreamedContent(image);
        }
        return sc;

    }
}

“无法加载图像#{imageController.imageID}”与所选图像 ID 一起显示,但我在图形面板中看不到图像。 在日志中我也没有看到任何错误消息,它返回流式内容。

更新代码:1

<p:layoutUnit id="centre" position="center"  >
    <h:panelGrid id="test" columns="2" cellpadding="2" >
        <h:panelGroup>
            <div id="imageWrapper" style="width:600px; height:400px; margin:auto; overflow:scroll; position:relative;">
                <p:graphicImage id="Img1" value="#{imagesStreamer.image}" alt="image id to be displayed #{imagesLst.imageID}" >
                    <f:param name="id5" value="#{imagesLst.imageID}" />
                </p:graphicImage>
            </div>
        </h:panelGroup>
    </h:panelGrid>
</p:layoutUnit>

<p:layoutUnit id="right" position="east" >
    <h:panelGrid  id="panelGrid3" columns="2" cellspacing="2" cellpadding="2">
        <ui:repeat id="repeat5" value="#{getData.imageThumbnail1}" var="imagesLst" varStatus="loop">
            <h:panelGroup>
                <p:commandLink id="cl5" update=":form:tabView:test">
                    <p:graphicImage id="gi5" value="#{imagesStreamer.image}" alt="image not available3" >
                        <f:param name="id5" value="#{imagesLst.imageID}" />
                    </p:graphicImage>
                </p:commandLink>
            </h:panelGroup>
        </ui:repeat>
    </h:panelGrid>
</p:layoutUnit>

【问题讨论】:

    标签: jsf-2 primefaces


    【解决方案1】:

    替换

    <p:graphicImage id="prodImage" value="#{imageController.image}" alt="unable to load image #{imageController.imageID}" />
    

    通过

    <p:graphicImage id="prodImage" value="#{imagesStreamer.image}" alt="unable to load image #{imageController.imageID}">
        <f:param name="id" value="#{imageController.imageID}" />
    </p:graphicImage>
    

    并删除 ImageController#getImage() 方法。继续为所有动态图像使用ImageStreamer(假设您使用了one of your previous questions 中提供的那个)。

    【讨论】:

    • 不,它没有发生,检查上面的更新代码,我已经进行了更改并删除了 f:setPropertyActionListener 部分,在我的托管 bean imagesStreamer.image 中返回了数据,但在页面中我看不到图片,只看到 alt 部分。
    • 我做到了,以最可悲的方式,我将 ByteArrayInputStream 存储在一个数组列表中 - 在同一页面中再次传递此值不起作用(至少对我而言),现在我又添加了一个值我存储 ByteArrayOutputStream 的数组列表,然后将其转换为 ByteArrayInputStream,然后再转换为流式内容,它以某种方式工作。需要找出更好的方法来做同样的事情。感谢BalusC发布大部分问题的答案,没有你大部分问题都将无法回答,保持巨大的贡献(知识)。
    猜你喜欢
    • 1970-01-01
    • 2011-10-23
    • 1970-01-01
    • 1970-01-01
    • 2012-04-21
    • 2016-05-22
    • 1970-01-01
    • 2016-12-13
    • 1970-01-01
    相关资源
    最近更新 更多