ユーザーの詳細を表示するユーザー プロファイル ページを作成しようとしています。
ページの URL は のようなものprofile.xhtml?username=randomString
です。
したがって、私がしなければならないことは、randomString のユーザーのすべてのデータをロードすることです。
ユーザーの画像を表示する瞬間なので、すべてうまくいきます。
私はGraphicImageコンポーネントでPrimeFacesを使用していますが、問題は画像を取得するNEWリクエストが発生するため、リクエストパラメーターが実際に失われ、getAvatar()
メソッドがnullパラメーターを受け取ることです。
1 つの解決策は Bean を SessionScoped にすることかもしれませんが、最初に要求されたユーザーからデータを取得し、randomString が変更されてもそれらを表示するので、助けを求めています:
リクエストパラメータに依存するデータベースからの動的画像を表示するにはどうすればよいですか?
ありがとう :)
編集:BalusCの返信に続く新しいコード
JSF ページ:
<c:set value="#{request.getParameter('user')}" var="requestedUser"/>
<c:set value="#{(requestedUser==null) ? loginBean.utente : userDataBean.findUtente(request.getParameter('user'))}" var="utente"/>
<c:set value="#{utente.equals(loginBean.utente)}" var="isMyProfile"/>
<pou:graphicImage value="#{userDataBean.avatar}">
<f:param name="username" value="#{utente.username}"/>
</pou:graphicImage>
(パラメータなしでページ リクエストが実行された場合に、ログに記録されたユーザーのプロファイルを表示したいので、この変数を使用していprofile.xhtml
ます)
マネージド Bean :
@ManagedBean
@ApplicationScoped
public class UserDataBean {
@EJB
private UserManagerLocal userManager;
/**
* Creates a new instance of UserDataBean
*/
public UserDataBean() {
}
public Utente findUtente(String username) {
return userManager.getUtente(username);
}
public StreamedContent getAvatar(){
String username = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("username");
System.out.println(username==null);
Utente u = findUtente(username);
return new DefaultStreamedContent(new ByteArrayInputStream(u.getFoto()));
}
}
どうしたの?ユーザー名は常に null です。
EDIT 2:BalusCへの返信を追加
ええ、パラメーターとして渡されたユーザー名を持つユーザーのエンティティを見つける必要があるときにgetAvatar()
メソッドが呼び出されるためです (オブジェクトを渡すことはできません!)。findUser()
<f:param>
主キーで使用してfindUser()
いるため、例外がスローされます。entityManager.find()
null
ところで、画像を含むパネルはとが主キーである場合にのみレンダリングされるため、 と の両方が null#{utente}
ではないことは間違いありません。#{utente.username}
#{utente ne null}
username
だから、HTML出力を実際に確認することはできません!
イメージを取得するには新しい http リクエストが必要なため、#{utente}
呼び出すと失われるのではないかと心配しています。getAvatar()