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

时间:2013-06-19 10:12:28

标签: jsf jsf-2 primefaces

我使用的是jsf PrimeFaces(v 3.5.0)库。 在选中javascript确认框delete按钮后,以下代码不会执行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

1 个答案:

答案 0 :(得分: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()时,它将正常继续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"

这样你的初始构造就可以了。