1

StreamedContentプロパティを持つオブジェクトのリストがあり、それを<p:graphicImage>コンポーネントに表示する必要があります。

<ui:repeat value="#{testuser.answers}" var="imageanswers">
    <p:graphicImage value="#{imageanswers.imageAnswer}" alt="Image" width="200" height="100" />
    <br />
</ui:repeat>

しかし、これは表示されていません。代わりに代替テキストが表示されます。この別の投稿でui:repeatまたはp:dataTableでのp:graphicImageの使用を見ましたが、メソッドがわかりませんgetImages()

4

2 に答える 2

3

getImagesメソッドを取得できません

メソッドは、の属性として設定されたプロパティgetImagesのゲッターです。imagesvalue<ui:repeat>

では、なぜそれがStringオブジェクトのリストなのですか?graphicImageコンポーネントにはStreamedContentである値が必要だと思いましたか?

はい、その値はStreamedContentである必要がありますが、StreamedContentsをループして、ページ上の画像のリストを作成することはできません。その理由は、graphicImagePrimefacesコンポーネントがHTMLページ上で標準のHTML<img>タグにレンダリングされるためです。FirebugやFiddler、またはその他のツールのコンソール出力を見ると、JSFページのリクエストに気付くでしょう。次に、ページが参照する各画像リソースの個別のリクエストにも気付くでしょう。これらの画像リソースは、一連の個別のリクエストから1つずつロードする必要があります。それでは、ManagedBeanは、どのリクエストがどの画像にマップされているかをどのように認識しているのでしょうか。

これが、繰り返しコンポーネントが一意の画像IDのリストを反復処理する必要がある理由です。これは、本質的に、graphicImageコンポーネントを構築するときに、idで識別される特定の画像のWebサーバーへの参照を含むHTML画像タグを構築するためです。この一意のIDを送信するために<f:param>、HTTPリクエストパラメータとして識別される一意のIDを追加するfaceletsタグを使用しています。

<ui:repeat value="#{bean.images}" var="imageID">
   <p:graphicImage value="#{bean.image}">
      <f:param name="imageID" value="#{imageID}" />
   </p:graphicImage>
</ui:repeat>

value繰り返しの属性はマネージドBeanプロパティゲッターであり、他のすべてのコンポーネントが取得graphicImageするイメージをロードするための同じメソッドです。graphicImage違いは、imageプロパティgetterメソッドでは、を使用しFacesContextて、HTTPリクエストパラメータとして渡された一意のimageIDを取得できることです。

public StreamedContent getImage() {
     FacesContext context = FacesContext.getCurrentInstance();
     HttpServletRequest myRequest = (HttpServletRequest) context.getExternalContext().getRequest();
     String imageID = (String) myRequest.getParameter("imageID");
     return new DefaultStreamedContent(new ByteArrayInputStream(themeFacade.find(Long.parseLong(imageID)).getImage()));
} 
于 2012-02-17T12:20:34.813 に答える
0

複合コンポーネント内でもgraphicImageを使用しようとすると問題になります...

于 2013-01-16T00:01:37.620 に答える