【问题标题】:How would I call a JavaScript function from a JSF Bean using RichFaces?如何使用 RichFaces 从 JSF Bean 调用 JavaScript 函数?
【发布时间】:2015-06-07 09:55:48
【问题描述】:

例如在 PrimeFaces 中有

RequestContext.getCurrentInstance().execute("alert(123)")

在 OmniFaces 中有

Ajax.onComplete("alert(123)") 

我尝试了从中获得的纯 JSF 选项:

但它们都不适用于 Richfaces,特别是我要么在响应中收到 no 警报(使用前两个选项),要么(使用最后一个选项) strong> 在浏览器控制台中出现以下错误的警报和其他空响应:

JSF AJAX Error:
description: "An empty response was received from the server. Check server error logs.",
responseCode: 200,
responseText: "<?xml version='1.0' encoding='UTF-8'?>?<partial-response><changes><eval><![CDATA[alert(123);]]></eva??l>",
responseXML: null

如何使用 RichFaces 将一些 JavaScript 从 Java 代码传递给浏览器?

谢谢

【问题讨论】:

  • 您使用的是什么版本的 JSF?根据版本,您可以利用较新的响应编写库,只需将脚本直接写入 ajax 响应

标签: javascript jsf richfaces


【解决方案1】:

是否需要直接从 bean 调用 JavaScript?

RichFaces 组件有@oncomplete,它可以让你设置在请求从服务器返回时执行的代码。

【讨论】:

  • 谢谢,但是是的,我真的需要这个来自控制器,而不是特定于组件。是不是有一些相当于RequestContext#getCurrentInstance()#execute() 或一些hack?
  • 嗯,控制器仍在响应来自页面的请求,不是吗?无论如何,关于“空响应”错误,这不是来自 RichFaces,从外观上看,您创建的响应是无效的 XML。 (??l>,看起来不太好。)我试过了,效果很好。
  • 哦,你能告诉我你使用的代码吗?我尝试了stackoverflow.com/questions/17864326/… 中建议的代码,它使用 eval 并导致无效响应
  • 我在固定引号的情况下再次尝试,但是当我保留 writer.endDocument(); writer.flush(); 时,我没有得到 RichFaces 预期的整个响应(我没有在 h:commandButton 点击时执行此操作但在另一个请求期间的控制器代码中)并且当我省略 writer.endDocument(); writer.flush(); 时,我没有正确插入 &lt;partialresponse&gt; 标签,而只是在 before &lt;?xml .. 响应的开始之前添加。在这两种情况下,我都会收到错误的回复
猜你喜欢
  • 1970-01-01
  • 2013-05-19
  • 1970-01-01
  • 2011-12-12
  • 2011-09-28
  • 1970-01-01
  • 1970-01-01
  • 2015-04-04
  • 2013-01-24
相关资源
最近更新 更多