簡體   English   中英

從托管 bean 調用 JavaScript 函數

[英]Calling a JavaScript function from managed bean

有沒有辦法從 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()時才有效。

全臉

使用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-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()");
}

在 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.ScriptEngine 和 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>;");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM