2

実行ごとに変化する xhtml ファイルから jsf Web アプリケーションにグラフィック イメージを表示したいと考えています。アップロードが完了すると、画像が表示されます。しかし、画像をアップロードした後、最初にアップロードした画像が常に表示されます。更新すると、最近アップロードされた画像が表示されます。最初の試行でアップロードした画像が常に表示されるのはなぜですか。でアップロードされた最新の画像を表示するにはどうすればよいですかh:graphicImage。サーブレットを使用して画像を表示しています。誰か助けてくれませんか...???

画像を表示するための私のコードは次のとおりです。

public void displayImage(byte[] image,HttpServletResponse response) { 
      ServletOutputStream out;
      if ( image != null ) {
      BufferedImage bufferedImage; 
           try {
                      bufferedImage = ImageIO.read(new ByteArrayInputStream(image)); 
                out = response.getOutputStream(); 
                ImageIO.write(bufferedImage, "png",out);
           } catch (IOException e) { 
                logger.info("Exception in reading the image" + e);
           }
      } else {     
           logger.info("No bytes present ");    
      }  

これが私の実際の要件です...最初のウィンドウに署名ボックスがあります。その中にアップロードボタンがあります。アップロードが完了すると、アップロードされた画像を含むウィンドウ(2)が表示され、最初のウィンドウの署名ボックスに保存できるように画像をトリミングできます。それは正常に動作しています。しかし、2番目のウィンドウをキャンセル/閉じると、1番目の署名ボックスが空のままになります。したがって、ユーザーは他の画像をアップロードできます。その場合、画像をアップロードしようとすると、正常にアップロードされますが、2番目のウィンドウに表示されず、最初にアップロードした画像が表示されます。どうしたら治りますか...???

4

1 に答える 1

3

画像をキャッシュしないようにブラウザに指示します。最初のビットが本体に書き込まれる前に、サーブレット応答に次のヘッダーを設定します。

response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
response.setHeader("Pragma", "no-cache"); // HTTP 1.0.
response.setDateHeader("Expires", 0); // Proxies.

頑固なブラウザーが引き続きキャッシュしないようにするには、タイムスタンプを含む要求パラメーターをサーブレット URL に追加します。

<h:graphicImage value="imageServlet?id=#{bean.imageId}&amp;t=#{now.time}" />

#{now}登録されている場所はfaces-config.xml次のとおりです。

<managed-bean>
    <managed-bean-name>now</managed-bean-name>
    <managed-bean-class>java.util.Date</managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
</managed-bean>
于 2012-05-16T11:51:33.333 に答える