亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

請問怎么從托管bean調用JavaScript函數

請問怎么從托管bean調用JavaScript函數

Cats萌萌 2019-11-03 04:04:36
有沒有辦法在JSF中從托管bean調用(執行)JavaScript函數?如果合適的話,我也在使用PrimeFaces。
查看完整描述

3 回答

?
溫溫醬

TA貢獻1752條經驗 獲得超4個贊

在PrimeFaces 6.2之前的版本中,您可以使用RequestContext#execute()此功能。


public void submit() {

    // ...

    RequestContext.getCurrentInstance().execute("alert('peek-a-boo');");

}

在PrimeFaces 6.2及更高版本中:


public void submit() {

    // ...

    PrimeFaces.current().executeScript("alert('peek-a-boo');");

}

在標準JSF中,沒有直接的公共API。最好的辦法是將所需的腳本設置為bean屬性,并<h:outputScript>在bean屬性不為空時有條件地呈現組件。


<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在具有rendered屬性的組件上不起作用。


<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用于該語句”,奇怪的是,PartialResponseWriter該類(負責編寫JSF ajax響應)自JSF 2.0 startEval()和endEval()方法以來就已經存在,它們應該使您能夠直接向響應編寫回調腳本,但要等到即將發布的JSF 2.3為止令人驚訝的是,沒有任何公共方法PartialViewContext可以委托這些方法。根據問題1412 PartialViewContext#getEvalScripts(),最終被添加到公共API。


public void submit() {

    // ...

    FacesContext.getCurrentInstance().getPartialViewContext().getEvalScripts().add("alert('peek-a-boo');");

}

對于較舊的JSF版本,只能通過創建自定義PartialViewContext實現來實現。JSF實用程序庫OmniFaces完全OmniPartialViewContext可以通過Ajax實用程序類使用它。


public void submit() {

    // ...

    Ajax.oncomplete("alert('peek-a-boo');");

}



查看完整回答
反對 回復 2019-11-04
?
楊魅力

TA貢獻1811條經驗 獲得超6個贊

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


從Primefaces 3.4文檔中:


RequestContext提供了一種在ajax請求完成時執行javascript的方法,與傳遞回調參數和執行條件javascript相比,此方法更容易。下面的示例在ajax請求完成時隱藏對話框。



public void save() {

  RequestContext requestContext = RequestContext.getCurrentInstance();  

  requestContext.execute("dialog.hide()");

}



查看完整回答
反對 回復 2019-11-04
  • 3 回答
  • 0 關注
  • 403 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號