1

我对 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) 是一种可以正常工作的通用方法。

utenteingetImage()是一个用户来自#{request.getParameter('user')}

现在,我使用此方法在用户的个人资料中显示头像。

问题是,当我打开个人资料页面时,getImage()被调用了两次:第一次,值是正确的,它加载了用户的头像。但它被第二次调用,这次utente取值为#{loginBean.utente},即登录用户,导致这一行显示登录用户的头像,而不是我们要显示的用户的头像。

所以这里的问题是:我怎样才能阻止这个方法被调用一次,即使我只写了一次?

我不明白发生了什么:|

4

0 回答 0