Rad*_*FID 1 javascript jsf primefaces jsf-2
我正在使用PrimeFaces p:menuitem组件执行删除.为了添加确认步骤,我使用了onclick显示JavaScript确认对话框的事件.在我的代码下面:
<p:menuitem icon="fa fa-fw fa-remove"
title="#{message.global_remove}"
value="#{message.global_remove}"
actionListener="#{componentListMB.delete(cp.id)}"
onclick="return confirm('#{message.component_list_confirm_deletion}')"
update=":component_list" />
Run Code Online (Sandbox Code Playgroud)
当用户确认删除时,不会触发该操作,而是#在URL的末尾添加a .
为什么在p:commandButton一切正常的情况下不会触发事件?
我正在使用:
当用户确认删除时,不会触发该操作,而是
#在URL的末尾添加a .
Primefaces实际上是将您p:menuitem的aHTML标记呈现为HTML标记,使用onclick该元素的事件来执行自己的Ajax请求.例如
onclick="PrimeFaces.ab({...});return false;"
Run Code Online (Sandbox Code Playgroud)
请注意,他们在元素return false;的末尾添加了一个,因此不会出现在URL中.which prevents the default browser behavioura#
添加confirm函数时,它将放置在onclick元素的开头,如下所示:
onclick="return confirm('confirm?');PrimeFaces.ab({...});return false;"
Run Code Online (Sandbox Code Playgroud)
如果您不确认,则不会#出现URL,因为阻止了默认行为.如果您确认它将出现.但是,因为您return首先调用语句,所以Ajax操作永远不会被执行.
你可以达到预期的行为改变你p:menuitem的onclick活动如下:
onclick="if (!confirm('#{message.component_list_confirm_deletion}')) return false;"
Run Code Online (Sandbox Code Playgroud)
为什么在
p:commandButton一切正常的情况下不会触发事件?
Primefaces以不同的方式对待p:commandButton.它包装用户onclick和Primefaces Ajax函数,将它们中的每一个放在一个单独的函数中,并将它们发送到Primefaces#bcn按顺序执行函数.返回的第一个false停止处理剩余的函数.的onclick在生成的HTML将如下:
onclick="PrimeFaces.bcn(this, event, [function(event){return confirm('confirm?')},function(event){PrimeFaces.ab({...});return false;}]);"
Run Code Online (Sandbox Code Playgroud)