我使用的是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
?
答案 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"
这样你的初始构造就可以了。