gpt4 book ai didi

javascript - 从托管 bean 调用 JavaScript 函数

转载 作者:IT王子 更新时间:2023-10-29 03:17:53 26 4
gpt4 key购买 nike

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

如果相关的话,我也在使用 PrimeFaces。

最佳答案

PrimeFaces 6.2+

使用 PrimeFaces#executeScript() :

public void submit() {
// ...
PrimeFaces.current().executeScript("alert('peek-a-boo');");
}

注意:仅在 submit() 时有效由 Ajax 调用。

PrimeFaces 6.2-

使用 RequestContext#execute() :

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

注意:仅在 submit() 时有效由 Ajax 调用。

JSF 2.3+

使用 PartialViewContext#getEvalScripts() :

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

注意:仅在 submit() 时有效由 Ajax 调用。

全方位

使用 Ajax#oncomplete() .

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

注意:仅在 submit() 时有效由 Ajax 调用。

JSF 2.2-

最好的办法是将所需的脚本设置为 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 does not work on a component which has rendered attribute .

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

关于javascript - 从托管 bean 调用 JavaScript 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5675017/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com