避免使用 <o:graphicImage> 渲染空字节数组
Avoid rendering empty byte array with <o:graphicImage>
我有两个 <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)}" />
如果用户图像为空或length/size 0,我如何显示虚拟图像?
你真的最好不要在 rendered
属性中调用那个图像流媒体方法。它在 JSF 生命周期中被多次调用,因此每次都从数据库中低效地获取图像字节。
首先,模型看起来也不对。我建议更改模型。使图像 ID 成为 User
或 UserProfile
table 和实体的 FK。
@Column(name="image_id")
private Long imageId;
然后,当用户uploads/sets一张图片时,将图片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 获取图像。
我有两个 <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)}" />
如果用户图像为空或length/size 0,我如何显示虚拟图像?
你真的最好不要在 rendered
属性中调用那个图像流媒体方法。它在 JSF 生命周期中被多次调用,因此每次都从数据库中低效地获取图像字节。
首先,模型看起来也不对。我建议更改模型。使图像 ID 成为 User
或 UserProfile
table 和实体的 FK。
@Column(name="image_id")
private Long imageId;
然后,当用户uploads/sets一张图片时,将图片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 获取图像。