是否有一种方法可以在JSF中调用(执行)托管bean中的JavaScript函数?
如果这是相关的,我也使用PrimeFaces。
PrimeFaces 6.2+
使用PrimeFaces#executeScript()
:
public void submit() {
// ...
PrimeFaces.current().executeScript("alert('peek-a-boo');");
}
注意:仅在Ajax调用submit()
时有效。
PrimeFaces 6.2 -
使用RequestContext#execute()
:
public void submit() {
// ...
RequestContext.getCurrentInstance().execute("alert('peek-a-boo');");
}
注意:仅在Ajax调用submit()
时有效。
使用PartialViewContext#getEvalScripts()
:
public void submit() {
// ...
FacesContext.getCurrentInstance().getPartialViewContext().getEvalScripts().add("alert('peek-a-boo');");
}
注意:仅在Ajax调用submit()
时有效。
OmniFaces
使用Ajax#oncomplete()
.
public void submit() {
// ...
Ajax.oncomplete("alert('peek-a-boo');");
}
注意:仅在Ajax调用submit()
时有效。
最好是将所需脚本设置为bean属性,并在bean属性不为空时有条件地呈现<h:outputScript>
组件。
<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更新它。另请参见Ajax update/render对具有render属性的组件不起作用。
<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提供了一种执行javascript的方法请求完成,这种方法比传递更容易回调参数和执行条件javascript。在下面的例子隐藏ajax请求完成时的对话框;
public void save() {
RequestContext requestContext = RequestContext.getCurrentInstance();
requestContext.execute("dialog.hide()");
}
最接近Primefaces的是;
http://www.primefaces.org/showcase/ui/callbackParams.jsf3.0也有一个增强;
http://code.google.com/p/primefaces/issues/detail?id=1342你不能简单地。
Managed Bean
在服务器上工作,JavaScript在浏览器上工作。
您可以根据managedbean
一般来说,Java提供了使用脚本引擎计算字符串的API。这可以通过javax.script. scriptenginine和javax.script.ScriptEngineManager类来完成。
我不完全确定您的情况是什么,但如果您可以将javascript作为字符串传递给托管bean,您可能会使用Java脚本API在服务器端运行javascript。
有关更多信息,请查看此链接:http://docs.oracle.com/javase/6/docs/technotes/guides/scripting/programmer_guide/index.html
我使用的是IceFaces,我用org.icefaces.util.JavaScriptRunner:
JavaScriptRunner.runScript(FacesContext.getCurrentInstance(), "<your_script>;");