0

Primefaces で JSF を使用しており、Java コードから画像を表示したいと考えています。

私はすでにhttp://www.primefaces.org/showcase/ui/dynamicImage.jsfのチュートリアルを見ました

しかし、画像ファイルへのパスを正しく取得する方法がわかりません。

コード:

豆:

@ManagedBean
public class ABean {

    private StreamedContent bStatus;

    public ABean() {
        try {
            Boolean connected = false;
            if (connected == true) {
                bStatus = new DefaultStreamedContent(new FileInputStream(new File("/images/greendot.png")), "image/jpeg");
            } else {                
                bStatus = new DefaultStreamedContent(new FileInputStream(new File("/images/reddot.png")), "image/jpeg");
            }
        } catch(Exception e) {
            e.printStackTrace();
        }

    }

    public StreamedContent getBStatus() {
        return bStatus;
    }

    public void setBStatus(StreamedContent bStatus) {
        this.bStatus = bStatus;
    }
}

xhtml:

<p:graphicImage value="#{ABean.bStatus}" />

戻り値:

java.io.FileNotFoundException: \images\reddot.png

フォームコードを表示するときに画像を保存する場所とその方法に関するベストプラクティスをいただければ幸いです。

4

2 に答える 2

4

画像は Web フォルダーにあるため、実際には DefaultStreamedContent を使用する必要はありません。その場で生成された画像だけに残しておきます。

あなたの場合、ブール変数に基づいて (Web フォルダー内の) 画像パスを返す単純なメソッドを作成するだけです。このようなもの:

public String getImagePath(){
    return connected ? "/images/greendot.png" : "/images/reddot.png";
}

また、graphicImage では、次のように参照できます。

<p:graphicImage value="#{yourBean.imagePath}"/>

Web コンテキストがルートでない場合は、graphicImage タグの調整が必要になる場合があることに注意してください。

編集 実際にはこれをさらに簡単にすることができます:

 <p:graphicImage value="#{yourBean.connected ? '/images/greendot.png' : '/images/reddot.png'}"/>

接続されたプロパティのゲッターがあることを確認してください。

于 2013-02-28T16:20:16.557 に答える
2

StreamedContent次のように作成します。

bStatus = new DefaultStreamedContent(FacesContext.getCurrentInstance().getExternalContext().getResourceAsStream("/images/greendot.png"), "image/jpeg");

作成するとき、new File()これはアプリケーション内だけでなく、ディスク内の絶対パスになります。

于 2013-02-28T16:16:25.417 に答える