私は単純なバリエーションで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を表示するか、間違っていますか?
これは、http://stackoverflow.com/a/9674671/617373に役立ちますか? – Daniel
それは正しい方法だと思われますが、どういうわけかそれはうまくいきません! 私はglassfih-web.xmlを最初の投稿に追加しました。 – StepTNT