gpt4 book ai didi

如果使用 javascript 确认框,JSF `action` 未执行?

转载 作者:行者123 更新时间:2023-12-04 04:52:48 25 4
gpt4 key购买 nike

我正在使用 jsf PrimeFaces (v 3.5.0) 库。
以下代码不执行 delete javascript 确认框后 OK按钮被选中。

<p:commandLink id="deletePGLinkId"
action="#{PresetGroupMgmtBean.delete}"
onclick="return confirm('Preset Group will be removed. Are you sure you want to continue?');"
update=":pmForm:presetPanel :pmForm:messagePanel">
<f:param value="#{item.value.ID}" name="deleteID"></f:param>
<h:graphicImage alt="Delete Image" style="border: none" value="./images/x.png" />
</p:commandLink>

我想避免使用 PrimeFaces ConfirmDialog因为我有这么多确认,所以需要时间写一个 ConfirmDialog对于每个。 Javascript 框看起来很简单,但它不起作用。

为什么不执行 delete ?

最佳答案

这在某种程度上是 PrimeFaces 命令链接渲染器中的一个设计错误。仔细查看生成的 HTML 输出:

onclick="return confirm('Sure?');;PrimeFaces.ab({source:'formId:linkId'});return false;"

你现在看到了吗? PrimeFaces.ab()谁负责提交表单将永远不会被调用!您需要以不同的方式编写条件:
onclick="if (!confirm('Sure?')) return false;"

这样,最终将生成 HTML,如下所示:
onclick="if (!confirm('Sure?')) return false;;PrimeFaces.ab({source:'formId:linkId'});return false;"

这样它就会正确地继续 PrimeFaces.ab()confirm()已返回 true (然后它不会调用 return false; 语句)。

Mojarra 使用 jsf.util.chain()为此。替换 <p:commandLink>来自 <h:commandLink>您将在生成的 HTML 输出中看到它:
onclick="jsf.util.chain(this,event,'return confirm(\'Sure?\');','mojarra.jsfcljs(document.getElementById(\'formId\'),{\'formId:linkId\':\'formId:linkId\'},\'\')');return false"

这样你的初始构造就会起作用。

关于如果使用 javascript 确认框,JSF `action` 未执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17188614/

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