如果使用javascript确认框,则不执行JSF`action`?
我正在使用jsf PrimeFaces(V3.5.0)库。 选择javascript确认框如果使用javascript确认框,则不执行JSF`action`?,jsf,jsf-2,primefaces,Jsf,Jsf 2,Primefaces,我正在使用jsf PrimeFaces(V3.5.0)库。 选择javascript确认框OK按钮后,以下代码不会执行delete <p:commandLink id="deletePGLinkId" action="#{PresetGroupMgmtBean.delete}" onclick="return confirm('Preset Group will be removed. Are you sure you want to continue?');" u
OK
按钮后,以下代码不会执行delete
<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>
我希望避免使用PrimeFacesConfirmDialog
,因为我有太多的确认,并且为每个确认都编写一个ConfirmDialog
。Javascript框看起来很简单,但不起作用
为什么不执行
delete
?这在PrimeFaces命令链接渲染器中有点设计缺陷。仔细查看生成的HTML输出:
onclick="return confirm('Sure?');;PrimeFaces.ab({source:'formId:linkId'});return false;"
onclick="jsf.util.chain(this,event,'return confirm(\'Sure?\');','mojarra.jsfcljs(document.getElementById(\'formId\'),{\'formId:linkId\':\'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;"
这样,当confirm()
返回true
时,它将正确地继续PrimeFaces.ab()
(然后它将不会调用return false;
语句)
Mojarra为此使用jsf.util.chain()
。将
替换为
,您将在生成的HTML输出中看到它:
onclick="return confirm('Sure?');;PrimeFaces.ab({source:'formId:linkId'});return false;"
onclick="jsf.util.chain(this,event,'return confirm(\'Sure?\');','mojarra.jsfcljs(document.getElementById(\'formId\'),{\'formId:linkId\':\'formId:linkId\'},\'\')');return false"
这样,您的初始构造就可以工作。在Firefox 22上为我工作,看起来更像是JSF错误,如果您删除
确认,您的代码是否工作?@landal:抱歉,但这真是胡说八道。@Alexandre:哪个PF版本?这个错误至少出现在3.5及之前的版本中。@BalusC我正在使用PrimeFaces 3.5,但实际上正在搜索它是否是3.5.XNo,一个简单的3.5版本,jar是PrimeFaces-3.5.jar。。。我注意到onclick=“return-confirm('Sure');;PrimeFaces.ab({source:'formId:linkId'));return-false;“
但它工作正常。非常有效,谢谢。事实上,我有一行代码不起作用:onclick=“if(confirm('位置将被删除。是否确实要继续?){return true;}否则{return false;}”
。根据您的建议,此操作有效:onclick=“if(!confirm(!Location)将被删除。您确定要继续吗?”){return false;}”
。还有一个问题:当选择OK
时,我曾执行block UIbui()
:onclick=“if(confirm('Location)将被删除。您确定要继续吗?”){bui.show();return true;}否则{return false;}“
。似乎不再可能了?您不应该再返回true。从onclick返回将阻止调用onclick代码的其余部分。使用以下命令:onclick=“if(!confirm('Sure?'))return false;bui.show();“
。或者,放置bui.show()
在onstart
中。好的,onstart=“bui.show()
工作正常。这就解决了所有问题,谢谢。