有没有办法从 JSF 中的托管 bean 调用(执行)JavaScript 函数?
如果这是相关的,我也在使用 PrimeFaces。
有没有办法从 JSF 中的托管 bean 调用(执行)JavaScript 函数?
如果这是相关的,我也在使用 PrimeFaces。
public void submit() {
// ...
PrimeFaces.current().executeScript("alert('peek-a-boo');");
}
注意:只有在submit()
被 Ajax 调用时才有效。
public void submit() {
// ...
RequestContext.getCurrentInstance().execute("alert('peek-a-boo');");
}
注意:只有在submit()
被 Ajax 调用时才有效。
使用PartialViewContext#getEvalScripts()
:
public void submit() {
// ...
FacesContext.getCurrentInstance().getPartialViewContext().getEvalScripts().add("alert('peek-a-boo');");
}
注意:只有在submit()
被 Ajax 调用时才有效。
public void submit() {
// ...
Ajax.oncomplete("alert('peek-a-boo');");
}
注意:只有在submit()
被 Ajax 调用时才有效。
您可以做的最好的事情是将所需的脚本设置为 bean 属性,并<h:outputScript>
在 bean 属性不为空时有条件地呈现组件。
<h:commandButton ... action="#{bean.submit}" />
<h:outputScript rendered="#{not empty bean.script}">#{bean.script}</h:outputScript>
public void submit() {
// ...
script = "alert('peek-a-boo');";
}
如果您通过 Ajax 提交表单,请不要忘记将其包装<h:outputScript>
在另一个组件中并使用 ajax-update 代替它。另请参阅Ajax 更新/渲染不适用于具有渲染属性的组件。
<h:commandButton ... action="#{bean.submit}">
<f:ajax execute="@form" render="script" />
</h:commandButton>
<h:panelGroup id="script">
<h:outputScript rendered="#{not empty bean.script}">#{bean.script}</h:outputScript>
</h:panelGroup>
根据您使用的 Primefaces 版本,您可以使用 RequestContext.execute("{js here}");
从 Primefaces 3.4 文档:
RequestContext 提供了一种在 ajax 请求完成时执行 javascript 的方法,与传递回调参数和执行条件 javascript 相比,这种方法更容易。下面的示例在 ajax 请求完成时隐藏对话框;
代码
public void save() {
RequestContext requestContext = RequestContext.getCurrentInstance();
requestContext.execute("dialog.hide()");
}
你不能简单地。
Managed Bean
适用于服务器和浏览器的 JavaScript。
您可以根据 managedbean 中设置的值有条件地调用 JavaScript
通常,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