避免使用<o:graphicimage>渲染空字节数组

时间:2015-05-26 18:32:24

标签: jsf omnifaces graphicimage conditional-rendering

如果没有图像,我有两个<o:graphicImage>来显示存储的图像和一个虚拟图像。实际上,存储图像的大小可以为零。如果是,则渲染第一个<o:graphicImage,但图像为空并且未正确呈现。

<o:graphicImage id="image" alt="Image"
        lastModified="#{userProfile.user.lastModified}"
        rendered="#{not empty images.getImage(userProfile.user.id)}"
        value="#{images.getImage(userProfile.user.id)}"

<o:graphicImage name="images/profile.png" width="125"
        rendered="#{empty images.getImage(userProfile.user.id)}" />

如果用户图像为空或长度/大小为0,如何显示虚拟图像?

1 个答案:

答案 0 :(得分:2)

您最好不要在rendered属性中调用该图片流媒体方法。它在JSF生命周期中被多次调用,因此每次都无法从数据库中获取图像字节。

该模型首先看起来并不正确。我建议改变模型。将图像ID设为UserUserProfile表和实体的FK。

@Column(name="image_id")
private Long imageId;

然后,当用户上传/设置图像时,将图像ID保存在那里。这样你可以使用它如下:

<o:graphicImage 
    value="#{images.getImage(userProfile.user.imageId)}" 
    rendered="#{not empty userProfile.user.imageId}" />

<h:graphicImage
    name="images/profile.png" 
    rendered="#{empty userProfile.user.imageId}" />

不要忘记更改图片流媒体以通过自己的ID而不是用户ID获取图片。