2012-03-23 12 views
0

私は単純なバリエーションでhttps://www.primefaces.org/showcase/ui/multimedia/photoCam.xhtmlの例を複製しようとしています。PrimeFacesのPhotocam:キャプチャされた画像を表示

この例では、すべての撮影画像が保存されて表示されます。

しかし、私はちょうど最新のものを表示する必要があるので、リスト参照を削除して少しコードを編集しました。

私はimageSwitchの代わりにgraphicsImageを使用しています。のonCaptureメソッドでは、前のイメージを上書きします。

しかし、ここに問題があります。

新しい画像が正しく取り込まれ、フォルダを参照して見ることができますが、ページ内では更新されません。 それは、それが最初のもの(このテイクの前にファイルがない)であれば動作するので、それは前のキャッシュされたものをまだ示しているようです。

提案がありますか?

編集: ここにいくつかのコード。

PrimeFaces JSF

<h:form> 

<h:panelGrid columns="3"> 
    <p:photoCam widgetVar="pc" listener="#{photoCamBean.oncapture}" update="photos"/> 

    <p:commandButton type="button" value="Capture" onclick="pc.capture()"/> 

    <p:imageSwitch effect="zoom" id="photos"> 
     <ui:repeat value="#{photoCamBean.photos}" var="photo"> 
      <p:graphicImage value="/photocam/#{photo}.png" /> 
     </ui:repeat> 
    </p:imageSwitch> 
</h:panelGrid> 

MY JSF

<p:photoCam widgetVar="pc" listener="#{registerBean2.onCapture}" update="photo"/> 
    <p:commandButton type="button" value="Capture" onclick="pc.capture()" update="photoPanel"/> 
    <p:panel id="photoPanel"> 
     <p:graphicImage value="./uploaded/temp/#{registerBean2.utente.username}.png" id="photo"> 
      <p:effect type="pulsate" event="load" delay="500"> 
       <f:param name="mode" value="'show'" /> 
      </p:effect> 
     </p:graphicImage> 
    </p:panel> 

PRIMEFACES BEAN

public void oncapture(CaptureEvent captureEvent) { 
    String photo = getRandomImageName(); 
    this.photos.add(0,photo); 
    byte[] data = captureEvent.getData(); 

    ServletContext servletContext = (ServletContext) FacesContext.getCurrentInstance().getExternalContext().getContext(); 
    String newFileName = servletContext.getRealPath("") + File.separator + "photocam" + File.separator + photo + ".png"; 

    FileImageOutputStream imageOutput; 
    try { 
     imageOutput = new FileImageOutputStream(new File(newFileName)); 
     imageOutput.write(data, 0, data.length); 
     imageOutput.close(); 
    } 
    catch(Exception e) { 
     throw new FacesException("Error in writing captured image."); 
    } 
} 

MY BEAN

画像は、フォルダにキャプチャされて更新されますが、ページでは変更されません。 リフレッシュしても私を助けません。 サーバーが再起動した後でのみ変更されます。

EDIT:8080/Unilife5戦争/アップロード/アバター/ cp99.png:ダニエルのソリューションを使用して ここに私のglassfish-web.xmlのだ

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd"> 
<glassfish-web-app error-url=""> 
    <class-loader delegate="true"/> 
    <jsp-config> 
     <property name="keepgenerated" value="true"> 
      <description>Keep a copy of the generated servlet class' java code.</description> 
     </property> 
     <property name="alternatedocroot_1" value="from=/uploads/* dir=/home/stefano/Documenti/UniLife" /> 
    </jsp-config> 
</glassfish-web-app> 

、私はローカルホストを参照することができたはずです/home/stefano/Documenti/UniLife/avatar/cp99.pngを表示するか、間違っていますか?

+1

これは、http://stackoverflow.com/a/9674671/617373に役立ちますか? – Daniel

+0

それは正しい方法だと思われますが、どういうわけかそれはうまくいきません! 私はglassfih-web.xmlを最初の投稿に追加しました。 – StepTNT

答えて

0

ないだけでなく...しかし、私は

のような他の内部のフォルダがなければBalusC

PrimeFace update after upload

<property name="alternatedocroot_1" value="from=/uploads/* dir=/var/webapp" /> 

And use http://localhost:8080/contextname/uploads/* to serve those uploaded images from by 

<h:graphicImage> the usual way. 

によって与えられた最も簡単な例を使用したいスタートのためにGlassFishの精通ステファノ/ドキュメント/ユニライフ/アバター/

そしてあなたはあなたがBeanコードを変更しましたか?

File imageFile = new File(extContext.getRealPath("NEW//uploaded//temp") + "//" + utente.getUsername() + ".png"); 
+0

もう一度おねがいしますが、http:// localhost:8080/contextname/uploads/404エラーが表示されます。私は_contextname_がパラメータだと思いますが、私はsuccedingせずにすべてのコンボを試しました。私はこの質問を閉じ、被験者が変更されたので、私は新しい質問を開きます! – StepTNT

+0

私はcontextnameがウェブアプリケーション名localhost:8080/yourWebAppName/uploadsを意味するとは思っていませんでしたか? – Daniel

+0

それは私が思ったものだが、うまくいかない。私は/ var/webappにファイルf.txtがあり、http:// localhost:8080/Unilife5-war/uploads/f.txtは404エラー! – StepTNT

関連する問題