2012-04-28 8 views
2

ユーザーに関する詳細を表示するユーザープロファイルページを作成しようとしています。リクエストパラメータに依存する動画を表示する

ページのURLはprofile.xhtml?username=randomStringのようなものです。

私は、randomStringのユーザーのすべてのデータを読み込んでいます。

これは、ユーザーの画像を表示する瞬間なので、うまくいっています。

私はgraphicImageコンポーネントでPrimeFacesを使用していますが、問題は新しい要求によって画像が取得されるため、実際には要求パラメータが失われ、getAvatar()メソッドはnullパラメータを受け取ります。

一つの解決策は、豆SessionScopedを作ることができるが、それは最初に要求したユーザからデータを取得し、randomStringが変更される場合でも、それは彼らが表示されますので、私は助けを求めています:

がどのように表示することができます要求パラメータに依存するデータベースからの動的イメージ?

感謝:)

EDIT:新コード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> 

(私は私がログインしたユーザーのプロファイルがあれば示すことにしたいので、これはvarsは使用していますページリクエスト唯一profile.xhtmlパラメータなし)

管理対象豆:

@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>は私がオブジェクトを通過させません!) 。

したがって、entityManager.find()nullプライマリキーを使用しているため、findUser()が例外をスローします。

ところで、私は画像が含まれているパネルは#{utente ne null}usernameが主キーである場合にのみレンダリングされるので!#{utente}#{utente.username}の両方がnullでないことを絶対的に確信しています

私は実際にHTML出力を確認することはできません!

私は画像を得ることが新しいHTTP要求

答えて

7

<f:param>として渡す必要と私はgetAvatar()を呼び出すとき#{utente}が失われたことを恐れています。レンダリング応答中に追加されます。

<p:graphicImage value="#{images.image}"> 
    <f:param name="id" value="#{someBean.imageId}" /> 
</p:graphicImage> 

#{images}ヘルパーBeanはちょうどこのようになります

@ManagedBean 
@ApplicationScoped 
public class Images { 

    @EJB 
    private ImageService service; 

    public StreamedContent getImage() throws IOException { 
     FacesContext context = FacesContext.getCurrentInstance(); 

     if (context.getRenderResponse()) { 
      // So, we're rendering the view. Return a stub StreamedContent so that it will generate right URL. 
      return new DefaultStreamedContent(); 
     } 
     else { 
      // So, browser is requesting the image. Get ID value from actual request param. 
      String id = context.getExternalContext().getRequestParameterMap().get("id"); 
      Image image = service.find(Long.valueOf(id)); 
      return new DefaultStreamedContent(new ByteArrayInputStream(image.getBytes())); 
     } 
    } 

} 

上記のヘルパーBeanが何の要求ベースの状態を持っていないとして、それは安全にすることができ、アプリケーションがスコープ。

+0

返信いただきありがとうございます! 私は既にそれを試してみましたが、成功しませんでした:(私は何か間違っていると確信しているので、コードを追加しました) – StepTNT

+0

'#{utente}'または '#{utente.username}'は'の生成されたHTML出力は何ですか?使用しているPrimeFacesのバージョンはどれですか? – BalusC

+0

' イメージが正しく表示され、両方がnullでないように表示されます 実際には、getAvatar()はリクエストパラメータがnullであることを表示します 'getAvatar()'が 'findUser( ) '' PF Exception'を投げますPF3.2にあります – StepTNT

関連する問題