2

我正在使用 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

4

1 回答 1

3

这在某种程度上是 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()truereturn false;

Mojarrajsf.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"

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

于 2013-06-19T10:45:02.253 回答