从托管bean调用JavaScript函数



是否有一种方法可以在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()时有效。

JSF 2.3 +

使用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()时有效。

JSF 2.2 -

最好是将所需脚本设置为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.jsf

3.0也有一个增强;

http://code.google.com/p/primefaces/issues/detail?id=1342

你不能简单地。

Managed Bean在服务器上工作,JavaScript在浏览器上工作。

您可以根据managedbean

中的值设置有条件地调用JavaScript

一般来说,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>;");

相关内容

  • 没有找到相关文章

最新更新