2

ユーザーの詳細を表示するユーザー プロファイル ページを作成しようとしています。

ページの 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()

4

1 に答える 1