取消制表符关闭p:accordionPanel

时间:2016-05-24 20:45:12

标签: jsf primefaces accordion

我有ap:accordionPanel,在面板的每个标签内都有一些用户可以操作的信息,我需要做的是如果用户关闭标签显示确认对话框(在标签关闭之前)类似“你确定要关闭标签吗?如果你做了改变就会丢失”。这是我试过的

<p:ajax event="tabClose" onstart="return myFunction()" 
listener" {myBean.myMethod}" process="@this" />
function myFunction() {
    var answer = confirm("are you sure you wanna close the tab? if you do your changes will be lost");
    if(answer){
        //some logic 
        return true;
    }else{
        //some logic
        return false;
    }
}

问题是,如果我在确认对话框中选择取消,则选项卡仍会关闭。 onStart="return false"是否应取消标签关闭?有没有办法实现我想要做的事情?

1 个答案:

答案 0 :(得分:1)

最后我解决了我的问题,显然onStart="return false"并没有阻止标签更改其状态但onTabChange的{​​{1}}属性确实存在,唯一的问题是由于某种原因当选项卡被打开时关闭选项卡时,手风琴的p:accordionPanel事件不会执行,所以我必须覆盖acordionPanel取消选择primefaces的函数来调用onTabChange事件

onTabchange

然后我只需要将PrimeFaces.widget.AccordionPanel.prototype.unselect = (function(index) { var cached_function = PrimeFaces.widget.AccordionPanel.prototype.unselect; return function() { var panel = this.panels.eq(index); if(this.cfg.onTabChange) { var result = this.cfg.onTabChange.call(this, panel); if(result === false) return false; } var result = cached_function.apply(this, arguments); return result; }; })(); 放在acciongiong面板(myFunction();)的onTabChange事件上就行了。