从托pipebean调用JavaScript函数

有没有办法从JSF中的托pipebean调用(执行)JavaScript函数?

如果这是相关的,我也使用PrimeFaces。

根据您所在的Primefaces版本,您可以使用RequestContext.execute("{js here}");

从Primefaces 3.4文档:

RequestContext提供了一种在ajax请求完成时执行javascript的方法,与传递callback参数和执行有条件的javascript相比,这种方法更容易。 下面的示例在ajax请求完成时隐藏对话框;

 public void save() { RequestContext requestContext = RequestContext.getCurrentInstance(); requestContext.execute("dialog.hide()"); } 

在PrimeFaces中,你可以使用RequestContext#execute()

 public void submit() { // ... RequestContext.getCurrentInstance().execute("alert('peek-a-boo');"); } 

在标准的JSF中,没有直接的公共API。 最好的办法是将所需的脚本设置为一个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更新/渲染在已呈现属性的组件上不起作用 。

 <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> 

对于“没有直接的公共API”这个语句,好奇的是,自从JSF 2.0的startEval()endEval()方法, PartialResponseWriter类(负责编写JSF ajax响应)已经可以直接写callback脚本响应,但直到即将到来的JSF 2.3中, PartialViewContext没有公共方法将委托给这些方法。 根据问题1412 PartialViewContext#getEvalScripts()终于被添加到公共API。

 public void submit() { // ... FacesContext.getCurrentInstance().getPartialViewContext().getEvalScripts().add("alert('peek-a-boo');"); } 

对于较老的JSF版本,只能通过创build自定义的PartialViewContext实现来实现。 JSF实用程序库OmniFaces完全可以使用OmniPartialViewContext ,它可以通过Ajax实用程序类使用 。

 public void submit() { // ... Ajax.oncomplete("alert('peek-a-boo');"); } 

也可以看看:

  • JSF / PrimeFaces ajax更新中断jQuery事件监听器函数绑定

你不能简单地。

Managed Bean在浏览器上的服务器和JavaScript上工作​​。

您可以根据在managedbean中设置的值有条件地调用JavaScript

通常,Java提供了一个使用脚本引擎来评估string的API。 这可以通过javax.script.ScriptEngine和javax.script.ScriptEngineManager类来完成。

我不完全确定你的情况是什么,但是如果你可以将javascript作为string传递给托pipebean,那么可以使用Java脚本API在服务器端运行javascript。

有关更多信息,请查看以下链接: http : //docs.oracle.com/javase/6/docs/technotes/guides/scripting/programmer_guide/index.html