从托管 bean 调用 JavaScript 函数
有没有办法从 JSF 中的托管 bean 调用(执行)JavaScript 函数?
如果相关的话,我也在使用 PrimeFaces。
Is there a way to call (execute) a JavaScript function from managed bean in JSF?
If that's relevant, I'm also using PrimeFaces.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
PrimeFaces 6.2+
使用
PrimeFaces#executeScript()
:注意:仅当 Ajax 调用
submit()
时才有效。PrimeFaces 6.2-
使用
RequestContext#execute()
:注意:仅当 Ajax 调用
submit()
时才有效。JSF 2.3+
使用
PartialViewContext# getEvalScripts()
:注意:仅当 Ajax 调用
submit()
时才有效。OmniFaces
使用 <代码>Ajax#oncomplete()。
注意:仅当 Ajax 调用
submit()
时才有效。JSF 2.2 -
您可以做的最好的事情是将所需的脚本设置为 bean 属性,并在 bean 属性不为空时有条件地呈现
组件。如果您通过 Ajax 提交表单,请不要忘记将
包装在另一个组件中,然后使用 ajax-update 来代替。另请参阅 Ajax 更新/渲染不适用于具有渲染属性的组件。PrimeFaces 6.2+
Use
PrimeFaces#executeScript()
:NOTE: works only when
submit()
is invoked by Ajax.PrimeFaces 6.2-
Use
RequestContext#execute()
:NOTE: works only when
submit()
is invoked by Ajax.JSF 2.3+
Use
PartialViewContext#getEvalScripts()
:NOTE: works only when
submit()
is invoked by Ajax.OmniFaces
Use
Ajax#oncomplete()
.NOTE: works only when
submit()
is invoked by Ajax.JSF 2.2-
Best what you can do is to set the desired script as a bean property and conditionally render a
<h:outputScript>
component when the bean property is not empty.In case you're submitting the form by Ajax, don't forget to wrap the
<h:outputScript>
in another component and ajax-update it instead. See also Ajax update/render does not work on a component which has rendered attribute.根据您使用的 Primefaces 版本,您可以使用
RequestContext.execute("{js here}");
来自 Primefaces 3.4 文档:
代码
Depending on which version of Primefaces you're on you can use
RequestContext.execute("{js here}");
From the Primefaces 3.4 documentation:
Code
Primefaces 中最接近的是;
http://www.primefaces.org/showcase/ui/callbackParams.jsf
话虽如此,3.0也有增强;
http://code.google.com/p/primefaces/issues/detail ?id=1342
Closest thing in Primefaces is;
http://www.primefaces.org/showcase/ui/callbackParams.jsf
Having said there is also an enhancement in 3.0;
http://code.google.com/p/primefaces/issues/detail?id=1342
你不能简单地。
托管 Bean
在服务器上运行,而 JavaScript 在浏览器上运行。您可以根据 ManagedBean 中设置的值有条件地调用 JavaScript
You can't simply.
Managed Bean
works on server and JavaScript on browser.You can make conditionally invoke JavaScript depending on the value set in managedbean
一般来说,Java 提供了一个 API 来使用脚本引擎评估字符串。这可以通过 javax.script.ScriptEngine 和 javax.script.ScriptEngineManager 类来完成。
我不完全确定您的情况是什么,但如果您可以将 javascript 作为字符串传递给托管 bean,您可能可以使用 Java 脚本 API 在服务器端运行 javascript。
欲了解更多信息,请查看此链接:
http://docs.oracle.com/javase /6/docs/technotes/guides/scripting/programmer_guide/index.html
In general, Java provides an API to evaluate a string using a scripting engine. This can be accomplished by javax.script.ScriptEngine and javax.script.ScriptEngineManager classes.
I am not entirely sure what your situation is, but if you can pass the javascript as a string to the managed bean, you could probably use Java scripting API to run the javascript on the server side.
For more information, check out this link:
http://docs.oracle.com/javase/6/docs/technotes/guides/scripting/programmer_guide/index.html
我正在使用 IceFaces 并使用 org.icefaces.util.JavaScriptRunner 解决:
I'm using IceFaces and I solved with org.icefaces.util.JavaScriptRunner: