2014-03-04 60 views
1

我有一個顯示一些選項卡的頁面。每個選項卡都包含一個手風琴。Primefaces 4.0嘗試調用錯誤的tabChange事件處理程序(TabView內的AccordionPanel)

從技術上講,我有一個p:tabView組件,其中包含四個p:tab。我們稱它們爲p:tabView > p:tab。在每個p:tab裏面,我有一個p:accordionPanel。我將其稱爲p:accordionPanel > p:tab

我的問題是,當用戶打開p:tabView > p:tab的一個,然後打開p:accordionPanel > p:tab的一個,然後點擊另一個p:tabView > p:tab,那麼我不知道我怎麼可以關閉(或「崩潰」)當前打開的p:accordionPanel > p:tab

我試圖用兩個onChange事件處理程序來解決問題,但我遇到了一個我不明白的methodNotFound異常。我的JSF代碼是:

<p:tabView dynamic="true" cache="false"> 
    <p:ajax event="tabChange" listener="#{controller.onTabViewTabChange}" update="@this" /> 
    <p:tab title="tab 1"> 
     <p:accordionPanel id="accordionPanelForTab1" dynamic="true" activeIndex="-" 
       value="#{controller.viewBeans}" 
       var="viewBean"> 
      <p:ajax event="tabChange" listener="#{controller.onAccordionPanelTabChange}" update="@this" /> 
      <p:tab title="#{viewBean.name}"> 
       <h:outputText value="#{viewBean.name}" /> 
      </p:tab> 
     </p:accordionPanel> 
    </p:tab> 
    <p:tab title="tab 2"> 
     <p:accordionPanel id="accordionPanelForTab2" dynamic="true" activeIndex="-" 
       value="#{controller.viewBeans}" 
       var="viewBean"> 
      ... 
     </p:accordionPanel> 
    </p:tab> 
    ... 
</p:tabView> 

在我的控制,我有以下事件處理程序:

public void onAccordionPanelTabChange(TabChangeEvent event) { 
    logger.info("onAccordionPanelTabChange, tab={}", event.getTab()); 
} 

public void onTabViewTabChange(TabChangeEvent event) { 
    logger.info("onTabViewTabChange, tab={}", event.getTab()); 
} 

當我點擊p:accordionPanel > p:tab,我在控制檯中看到預期的調試消息(「onAccordionPanelTabChange,標籤= ......「)。

但是,當我點擊p:tabView > p:tab,我得到以下異常:

javax.el.MethodNotFoundException: Method not found: [email protected](javax.faces.event.AjaxBehaviorEvent) 

所以Primefaces似乎能只有一個偵聽器tabChange事件。例外是指onAccordionPanelTabChange而不是onTabViewTabChange

當用戶點擊p:tabView p:tab時,是否有解決自動關閉當前打開的手風琴的原始問題的解決方案?

注意:它似乎是在PrimeFaces一個錯誤:https://code.google.com/p/primefaces/issues/detail?id=3876

+0

嘗試使用TabMenu HTTP:// www.primefaces.org/showcase/ui/tabMenu.jsf 而不是TabView –

+0

感謝您的回答,但TabMenu不是我所需要的(它重新加載頁面)。 –

+0

@ geceo-它是一個錯誤。嘗試帶有'AjaxBehaviorEvent'參數的處理程序,而不是'TabChangeEvent' – kolossus

回答

相關問題