2012-01-03 1 views
0

Как использовать прослушиватель AJAX внутри табуляции. Всякий раз, когда вкладка открыта (или для щелчка мыши в любом месте), слушатель должен выполнить. Я пробовал с event = click, change, blur и т. Д., Но не работал.Префикс AJAX событие не работает внутри tabView

<p:tabView activeIndex="#{backingbean.tanIndex}"> 
<p:ajax event="?" listener="#{backingbean.setTabIndex}" /> 

в view.jsf:

<p:tabView> 
    <p:ajax event="tabChange" listener="#{employeeEdit.onTabChange}"> 

в edit.jsf:

<p:tabView activeIndex="#{employeeEdit.tabIndex}"> 

в backingBean:

private int tabIndex; 
public int onTabChange(TabChangeEvent event) 
    { 
    // Here I'm getting event.getTab().getId() and set it to `tabIndex` property. 
    } 

При редактировании мне нужно перенаправить на этой вкладке который активен. Поэтому, если я не изменил вкладку onTabChange(), это не будет выполнено, а tabIndex имеет только старое значение. Я использую версию Primefaces 3.0 .M3.

ответ

0

Не уверен, что то, что я пишу, верно для версии 3.0.M3. Я имею перед документацией ver 3.0RC2 и есть абзац об этом, с объяснением и примером кода (глава TabView, пункт Ajax Behaviour Events). Вы должны посмотреть на это.

Это часть кода образца, который должен помочь наиболее:

<p:tabView> 
    <p:ajax event=”tabChange” listener=”#{bean.onChange}” /> 
</p:tabView> 
+0

событие = «tabChange» отлично с 3.0.M3, но если я не изменил вкладку, AJAX слушатель не будет выполняться.Итак, то, что я закодировал в поддержке боба, не имеет никакого смысла. –

+0

Не понимаю. Можете ли вы обновить свой вопрос с дополнительной информацией, например, бэк-файлом и тем, что вы точно хотите сделать. – perissf

+0

Я обновил эту проблему. –

0

Ярон имеет ответ, что релиз 3.0.1 исправил это, но у меня было все это до 3.5, я считаю, что у меня все еще была эта проблема. на firefox и IE обработчик javascript для вкладок не запускал событие ajax. На google chrome по какой-то причине он действительно работал.

Я перешел на Primefaces 5.0 сегодня, и это не имеет проблемы больше. Таким образом, в самом худшем случае перейдите к Primefaces 5.0 и вы будете все хорошо в капюшоне

1

У меня была аналогичная проблема с Primefaces 5,1

Пока я поставил TabView в форму все работало хорошо. Но поскольку я хотел использовать отдельные формы в своих вкладках, мне пришлось удалить окружающие формы табуляции, чтобы избежать вложенных форм. Без окружающего объекта событие ajax больше не срабатывало при смене вкладки.

Моим решением было использовать remotecommand в форме, параллельной табуляции.
Функция remotecommand запускается атрибутом onTabChange элемента tabview. При этом вызове я перенаправил параметр индекса в параметры глобального запроса.

<p:tabView id="rootTabMenu" styleClass="tabcontainer" prependId="false" 
     activeIndex="#{sessionData.activeTabIndex}" widgetVar="rootTabMenu" 
     onTabChange="tabChangeHelper([{name: 'activeIndex', value: index}])"> 
    // Tabs... 
</p:tabView> 

<h:form id="tabChangeHelperForm"> 
    <p:remoteCommand name="tabChangeHelper" actionListener="#{sessionData.onTabChange()}" /> 
</h:form>  

В фоновом режиме я снова взял значение из карты параметров запроса и установил активный индекс.

public void onTabChange() 
{ 
    FacesContext context = FacesContext.getCurrentInstance(); 
    Map<String, String> paramMap = context.getExternalContext().getRequestParameterMap(); 
    String paramIndex = paramMap.get("activeIndex"); 
    setActiveTabIndex(Integer.valueOf(paramIndex)); 
    System.out.println("Active index changed to " + activeTabIndex); 
}  

Надежда, которая может помочь вам