2014-09-02 64 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