如果没有图像,我有两个<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,如何显示虚拟图像?
答案 0 :(得分:2)
您最好不要在rendered
属性中调用该图片流媒体方法。它在JSF生命周期中被多次调用,因此每次都无法从数据库中获取图像字节。
该模型首先看起来并不正确。我建议改变模型。将图像ID设为User
或UserProfile
表和实体的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获取图片。