0

データベースによって取得された画像の表示に問題がありました。

発信者を表示:

<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()));
        }
    }
}

このコードは何も表示せず、メソッドが呼び出されないように見えます (決してコンソールに出力しないでください)!

スコープを変更して数日間試行した後、@Named の代わりに @ManagedBean を使用しようとしましたが、うまくいきました!!!

これが@ManagedBeanでのみ機能し、@Namedでは機能しない理由を誰かが説明できますか?

4

1 に答える 1

1

javax.enterprise.context.ApplicationScopedインポートがあることを確認してください。

@ApplicationScoped(例: ) に別のインポートがある場合は、javax.faces.bean.ApplicationScopedCDI アノテーション (デフォルト) を持つものだけでなく、すべての Bean を検出するように CDI を構成する必要があります。

すべての Bean のディスカバリーをチューニングするには、emptybeans.xmlを WEB-INF ディレクトリーに追加するか、そこに既に beans.xml がある場合は、次のように要素に追加bean-discovery-mode="all"します。<beans>

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
       bean-discovery-mode="annotated">
</beans>
于 2016-05-23T09:20:53.207 に答える