Primefaces对tabChange / tabClos​​e上内部元素的AccordionPanel验证

时间:2014-01-08 09:34:57

标签: jsf primefaces jquery-ui-accordion

我正在使用带有三个标签的手风琴面板。

每个标签都包含 accordionPanel 所需的字段和<p:ajax>标记:

<p:ajax event="tabChange" update=":contentForm:growl"/>
<p:ajax event="tabClose" update=":contentForm:growl"/>

默认情况下,所有标签均已关闭。当我单击打开任何选项卡时,它会对所有选项卡中的所有输入执行更改。

如何在打开/关闭标签期间跳过字段验证并执行ajax查询?

(我需要一个Ajax查询来保存打开的标签索引到Bean:activeIndex="#{tabBean.activeTabs}"

1 个答案:

答案 0 :(得分:0)

我已经解决了这个问题。我创建了saver-class:

import javax.faces.event.AjaxBehaviorEvent;
import org.primefaces.component.accordionpanel.AccordionPanel;

public class ActiveIndexSaver {
     private String activeTabs = "-1,0";

     public String getActiveTabs() {
         return activeTabs;
     }

     public void setActiveTabs(String activeTabs) {
         this.activeTabs = activeTabs;
     }

     public void saveIndexes(AjaxBehaviorEvent abe){
         AccordionPanel accordion = (AccordionPanel)abe.getComponent();
         activeTabs = accordion.getActiveIndex();
     }
}

之后,我将上面的bean的Inject写入了page-bean并为他获取了getter:

@Inject
private ActiveIndexSaver activeIndexSaver;
....
public ActiveIndexSaver getActiveIndexSaver() {
    return activeIndexSaver;
}

最后,html:

<p:accordionPanel ... activeIndex="#{tabBean.activeIndexSaver.activeTabs}">
     <p:ajax event="tabChange" immediate="true" listener="#{tabBean.activeIndexSaver.saveIndexes}"/>
     <p:ajax event="tabClose" immediate="true" listener="#{tabBean.activeIndexSaver.saveIndexes}"/>
     ......