1

重複の可能性:
p:graphicImage を使用してデータベースから画像を表示する

データベースに保存されているURLから写真を表示したいので、次のように使用しました

                <h:panelGrid columns="1">
                    <p:graphicImage value="#{userController.photo}"/> 
                </h:panelGrid>

photo 属性は、写真の場所を指す URL 文字列です。

public String getPhoto() {
   String path = new File("").getAbsolutePath();
   ph =ejbPhoto.find(current.getIdPhoto()); 
   System.out.println("+PHOTO +++++++++++++++"+path+"\\"+ph.getPhotoName()); 
   return path+"\\"+ph.getPhotoName();
}

system.out.println は画像の正しいパスを示していますが、表示ページには写真が表示されていません。

4

3 に答える 3

3

まず、new File("").getAbsolutePath()現在の作業ディレクトリを返します。つまり、サーバーを起動するコマンドが実行されたときに開かれたローカル ディスク ファイル システム ディレクトリです。この値は、サーバーが起動されるたびに同じであるとは限りません。サーバーの起動方法によって異なります。たとえば、IDE、コマンド コンソール、またはサービスなどで。

ビジネス ロジックをこのような環境の矛盾に依存させてはなりません。

次に、生成された HTML<img src>は、ローカル ディスクのファイル システム パスではなく、URL (HTTP パス) を指す必要があります。つまり、画像を URL で個別にダウンロードする必要があるのは Web ブラウザーですhttp://example.com/contextname/images/foo.png(したがって、それらを HTML コードなどに自動的に埋め込む必要がある Web サーバーではありません)。現在のコード アプローチはnew File("")、デプロイされた Web アプリケーションのパブリック Web コンテンツ フォルダーを指している場合にのみ機能しますが、これは非常にありそうもないことです。

が有効な HTTP URL を指していることを確認する必要が<img src>あります。これは、Web ブラウザーのアドレス バーにコピーペーストできるものとまったく同じです。


なぜそのように設計したのか、ビジネス上の制限が何であるかは不明であるため、適切に解決する方法を適切に回答することはできません. したがって、これを解決する(わずかな)さまざまな方法を示すいくつかのリンクがあります。

于 2012-10-03T20:38:20.057 に答える
1

私の2セント。画像のURLを使用すると、ディレクトリ構造が他の人に公開される可能性がありますfirebug。したがって、多くの悪いことが起こる可能性があります。私は、アプリケーションサーバーのファイルシステムに関連するファイルパスを使用するのが好きではありません。実装でサポートされている場合は、primefacesのDynaImageを使用してデータベースから画像を提供することをお勧めします

于 2012-10-04T04:12:06.720 に答える
-1

解決策は簡単で、写真のパスは netbeans プロジェクトの Web フォルダー (Project\build\web\photo) の下にあります。

<h:panelGrid columns="1" width="50%" >
                    <p:graphicImage value="/photo/#{userController.photo}"/> 
  </h:panelGrid>

そして写真のgetメソッドに私は入れました:

public String getPhoto() {

   ph =ejbPhoto.find(current.getIdPhoto()); 
   if(ph==null) return "noPhoto.png";
   System.out.println(ph.getPhotoName()); 
   current=null;
    return ph.getPhotoName();
}

写真の名前には拡張子が含まれます。

于 2012-10-03T22:09:47.453 に答える