私のdbで取得した画像を表示する際に問題が発生しました。primfaces graphicimage CDI Beanが動作しない
ビューの呼び出し元:
<p:graphicImage value="#{appController.image}" height="200 px" >
<f:param name="oid" value="#{item.oid}" />
</p:graphicImage>
コントローラー:
@Named("appController")
@ApplicationScoped
public class AppController {
@Inject
private MultimediaFacade multimediaFacade;
public StreamedContent getImage() throws IOException {
System.out.println("getting image")
FacesContext context = FacesContext.getCurrentInstance();
if (context.getCurrentPhaseId() == PhaseId.RENDER_RESPONSE) {
// So, we're rendering the HTML. Return a stub StreamedContent so that it will generate right URL.
return new DefaultStreamedContent();
} else {
// So, browser is requesting the image. Return a real StreamedContent with the image bytes.
String imageId = context.getExternalContext().getRequestParameterMap().get("oid");
int oid=Integer.parseInt(imageId);
System.out.println(oid);
Multimedia image = multimediaFacade.find(oid);
System.out.println(Arrays.toString(image.getFileBlob()));
return new DefaultStreamedContent(new ByteArrayInputStream(image.getFileBlob()));
}
}
}
このコードは何も示していないと、それはメソッドが呼び出されないように(コンソールで印刷ことはありません)になります!
私はスコープを変更した後、@ ManagedBeanを@Namedの代わりに使用しようとしましたが、動作します。
誰かが@ManagedBeanでのみ動作し、@Namedでは動作しない理由を説明できますか?
' javax.enterprise.context.ApplicationScoped' JSFのためのjavax.faces.bean.ApplicationScoped' – Geinmachi
これは範囲の問題ではありません – Marco
CDI Beanは「普通の」ページでうまく動作します。 – BalusC