JSF で奇妙な問題が発生しました。
イメージを取得するメソッドを呼び出す PrimeFaces GraphicImage があります。
さて、私はこのメソッドをこのコンポーネントだけで使用するように書いたので、1 回だけ呼び出されることを期待していますが、ここで驚きがあります。同じページで、このメソッドは異なるパラメーターで 2 回呼び出されます!
<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()
2 回呼び出されることです。1 回目は値が正しく、ユーザーのアバターが読み込まれます。しかし、それは 2 回目に呼び出され、今回utente
は の値を取得#{loginBean.utente}
します。これはログインしているユーザーであり、この行には、表示したいユーザーのアバターではなく、ログインしているユーザーのアバターが表示されます。
ここで質問があります。このメソッドを 1 回だけ記述したとしても、このメソッドが 1 回呼び出されるのをどのように停止できますか?
何が起こっているのかわかりません :|