我对 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
ingetImage()
是一个用户来自#{request.getParameter('user')}
现在,我使用此方法在用户的个人资料中显示头像。
问题是,当我打开个人资料页面时,getImage()
被调用了两次:第一次,值是正确的,它加载了用户的头像。但它被第二次调用,这次utente
取值为#{loginBean.utente}
,即登录用户,导致这一行显示登录用户的头像,而不是我们要显示的用户的头像。
所以这里的问题是:我怎样才能阻止这个方法被调用一次,即使我只写了一次?
我不明白发生了什么:|