2014-09-02 85 views
0

使用primefaces fileupload我試圖顯示最近上傳的圖像在img標籤正上方上傳組件,但它只顯示後,我手動按F5或命中輸入瀏覽器我已嘗試location.reload()和histry.go(0),但圖像沒有加載如何刷新圖像使用javascript

<img height="100"  src="relativepath/productId"/> 
<p:fileUpload oncomplete="history.go(0)" fileUploadListener="#{productController.upload}" mode="advanced"  
dragDropSupport="false" allowTypes="/(\.|\/)(gif|jpe?g|png)$/" /> 
+0

你需要有上傳改變IMG的'src'後上傳完成後,您將獲得新上傳圖片的「官方」網址。 – 2014-09-02 16:03:08

+0

控制器中的上傳方法執行該作業,它將以名稱productId的相對路徑上傳圖像,但我需要刷新原因? – 2014-09-02 16:09:11

+0

'history.go(0)'不一定會做另一個http請求來查看是否有任何改變。它可以自由使用緩存數據,這意味着最初加載的任何圖像,而不是你剛上傳的任何圖像。 – 2014-09-02 16:12:45

回答

1

不限制自己的JavaScript。 ajax之後的更新,在url中使用timestamp參數將會正常工作。

這應該是XHTML代碼:

<h:panelGroup id="panelToUpdate"> 
    <img height="100" src="relativepath/productId?t=#{myManagedBean.currentTimeInMillis}"/> 
</h:panelGroup> 
<p:fileUpload update="panelToUpdate" fileUploadListener="#{productController.upload}" 
    mode="advanced" dragDropSupport="false" allowTypes="/(\.|\/)(gif|jpe?g|png)$/" /> 

,這應該是在你的託管bean的方法:

public long getCurrentTimeInMillis() 
{ 
    return System.currentTimeMillis(); 
} 
+0

謝謝你把我的注意力轉移到 – 2014-09-03 02:02:29

+0

當然,不客氣。 – 2014-09-03 07:55:12

-1

下面的代碼加載圖像每隔1秒...希望我幫

<div id="wraper"> 
</div> 
<style> 
    var t=setInterval(runFunction,1000); 
    function runFunction() { 
     document.getElementById("p1").innerHTML = '<img height="100"  src="relativepath/productId"/> 
     <p:fileUpload oncomplete="history.go(0)" fileUploadListener="#{productController.upload}" mode="advanced"  
     dragDropSupport="false" allowTypes="/(\.|\/)(gif|jpe?g|png)$/" />' 
    } 
</style> 
+0

這不應該工作。 'p:fileUpload'是一個在服務器端轉換爲本地html和javascript的組件。你不能期望它被放置在一個javascript函數後被渲染。 – 2014-09-03 07:54:52