我对JSF有一个奇怪的问题。
我有一个PrimeFaces GraphicImage,它调用一个方法来获取图像。
现在,我已经编写了这个方法,只是被这个组件使用,所以我希望它只被调用一次,但是这里有惊喜: 在同一页面中,此方法被调用两次并使用不同的参数!
<pou:graphicImage rendered="true" height="150" style="border: 1px dotted; margin-left: 150px;" value="#{userDataBean.getAvatar()}" width="150"/>
public StreamedContent getImage(Utente u) throws IOException {
File avatar = new File(FacesContext.getCurrentInstance().getExternalContext().getRealPath("/resources/images/no_avatar.png"));
if (u.getFoto() == null) {
return new DefaultStreamedContent(new ByteArrayInputStream(Files.readAllBytes(avatar.toPath())), "image/jpeg");
}
return new DefaultStreamedContent(new ByteArrayInputStream(u.getFoto()), "image/jpeg");
}
public StreamedContent getImage() throws IOException {
return getImage(utente);
}
因此,getImage(Utente u)是一种没有问题的通用方法。
utente
中的{p> getImage()
是来自#{request.getParameter('user')}
的用户
现在,我使用此方法在用户的个人资料中显示avatr。
问题在于,当我打开个人资料页面时,getImage()
被调用两次:
第一次,值是正确的,它加载用户的头像。
但它第二次被调用,而这次utente
取值#{loginBean.utente}
,这是登录用户,导致此行显示已登录用户的头像而不是用户的头像我们想要表现出来。
所以这是问题所在: 我怎么能阻止这个方法被调用一次,即使我只写了一次呢?
我不明白发生了什么:|