【问题标题】:ReRender an uploaded image (a4j:mediaOutput)重新渲染上传的图像 (a4j:mediaOutput)
【发布时间】:2014-08-26 19:16:24
【问题描述】:

我想在上传后通过 ajax(在 a4j:mediaOutput 标签中)显示上传的图片,但我无法重新渲染 a4j:mediaOutput 标签:

<h:form enctype="multipart/form-data"> <a4j:jsFunction name="refreshPic" reRender="picHolder" /> <p:fileUpload mode="advanced" fileLimit="1" multiple="false" allowTypes="/(\.|\/)(gif|jpe?g|png)$/" auto="true" fileUploadListener="#{createSopController.fileChanged}" oncomplete="refreshPic()" /> <a4j:outputPanel id="picHolder"> <a4j:mediaOutput id="pic" element="img" cacheable="false" createContent="#{sessionImageBean.paint}" value="#{createSopBean.imageId}" mimeType="#{createSopBean.sop.mimeType}" width="672" height="1005"/> </a4j:outputPanel> </h:form>

有什么想法吗?

【问题讨论】:

  • 可能是兼容性问题,函数是否正在执行?
  • jsFunction在上传后执行,但是无法重新渲染a4j:mediaOutput标签...
  • 在此处查看我的答案:stackoverflow.com/a/31395282/460557 如果有帮助,也许它可以帮助您解决问题,别忘了点赞 ;)

标签: ajax jsf primefaces richfaces ajax4jsf


【解决方案1】:

a4j:mediaOutput 需要一个不同的请求参数,以便不被缓存。为此,我更喜欢使用来自应用程序范围的托管 bean 的最新时间戳。这就像通过将时间戳参数附加到它们的 url 来克服 js 和 css 文件的浏览器缓存。

顺便说一句,您在渲染图像时不需要对这个参数做任何事情。

<a4j:mediaOutput ... >
    <f:param value="#{appMB.timeStamp}" name="time" />
</a4j:mediaOutput>

【讨论】:

  • 对不起,它不起作用。同样的问题。手动刷新 (F5) 有效,但不是自动的。还有其他想法吗?
  • 您以毫秒为单位从托管 bean 获得时间戳,对吧?
  • public long getTimeStamp(){ return System.currentTimeMillis(); }
  • 您可以尝试删除a4j:outputPanel 并直接重新渲染“pic”吗?
  • 你能把prependId="false"加到h:form,把execute="@this"加到a4j:jsFunction吗?
猜你喜欢
  • 1970-01-01
  • 2016-02-17
  • 1970-01-01
  • 2013-01-03
  • 1970-01-01
  • 1970-01-01
  • 2017-06-26
  • 2016-05-05
  • 2014-01-04
相关资源
最近更新 更多