[英]Oracle MAF : (Signature Capture) Calling a javascript function from Managed Bean
[英]Calling a JavaScript function from managed bean
有沒有辦法從 JSF 中的托管 bean 調用(執行)JavaScript 函數?
如果這是相關的,我也在使用 PrimeFaces。
使用PrimeFaces#executeScript()
:
public void submit() {
// ...
PrimeFaces.current().executeScript("alert('peek-a-boo');");
}
注意:只有在 Ajax 調用submit()
時才有效。
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()
時才有效。
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-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
我正在使用 IceFaces,我用 org.icefaces.util.JavaScriptRunner 解決了:
JavaScriptRunner.runScript(FacesContext.getCurrentInstance(), "<your_script>;");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.