2012-03-28 2 views
6

Активный указатель не обновляется автоматически. ReaD в нескольких сообщениях, поместив tabView в форму, в которой он работает. Или, включив в табуляцию <p:ajax event="tabChange"/>, он работает. Но ничто не похоже на работуАктивный указатель табуляции не обновляется автоматически

Xhtml

Sample 1: автоматические обновления

<p:tabView id="categoryTabView" var="promoArticle" value="#{promotionDetailBean.artDTOs}" activeIndex="#{promotionDetailBean.activeTabIndex}"> 
      <p:tab id="categoriesTab" title="#{promoArticle.categoryName}"> 
       <p:dataTable id="promotionDetail_dataTable" var="articlePromo" value="#{promoArticle.artVO}" selection="#{promotionDetailBean.selectedArt}" rowIndexVar="rowIndex"> 
        <p:column id="select" selectionMode="multiple" /> 

        <p:column id="barCode"> 
         <h:inputText id="barCodeInputTxt" value="#{articlePromo.barCode}" 
         styleClass="inputTextStyle" onchange="onSuggestedValueChange('categoryTabView',#{promotionDetailBean.activeTabIndex}, 'promotionDetail_dataTable',#{rowIndex},'originalCostInputTxt')" /> 
        </p:column> 
       </p:dataTable> 
      </p:tab> 
     </p:tabView> 

Sample 2: Обновление на tabChange события

<h:form id="form"> 
    <p:growl id="growlm" showDetail="true" /> 

      <p:tabView id="categoryTabView" var="promoArticle" value="#{promotionDetailBean.artDTOs}" > 
       <p:ajax event="tabChange" listener="#{promotionDetailBean.tabChanged}" update=":growlm" /> 
        <p:tab id="categoriesTab" title="#{promoArticle.categoryName}"> 
         <p:dataTable id="promotionDetail_dataTable" var="articlePromo" value="#{promoArticle.artVO}" selection="#{promotionDetailBean.selectedArt}" rowIndexVar="rowIndex"> 
          <p:column id="select" selectionMode="multiple" /> 

          <p:column id="barCode"> 
           <h:inputText id="barCodeInputTxt" value="#{articlePromo.barCode}" 
           styleClass="inputTextStyle" onchange="onSuggestedValueChange('categoryTabView',#{promotionDetailBean.activeTabIndex}, 'promotionDetail_dataTable',#{rowIndex},'originalCostInputTxt')" /> 
          </p:column> 
         </p:dataTable> 
        </p:tab> 
       </p:tabView> 

Мне нужно идентифицировать ячейку на событии onChange. Но activeIndex всегда 0, инициализированное значение. Событие не получает вызов.

боб

private Integer activeTabIndex = 0; 
public Integer getActiveTabIndex() { 
    return activeTabIndex; 
} 
public void setActiveTabIndex(Integer activeTabIndex) { 
    this.activeTabIndex = activeTabIndex; 
} 

боб

public void tabChanged(TabChangeEvent event){ 
     TabView tv = (TabView) event.getComponent(); 
     this.activeTabIndex = tv.getActiveIndex(); 
    } 

Но событие не получает trigerred. Также не обновляется автоматически.

В чем могут быть вероятные проблемы?

Спасибо, Shikha

ответ

5

следующая работал для меня:

XHTML:

<p:tabView id="categoryTabView" var="promoArticle" 
     value="#{promotionDetailManagedBean.articuloPromocionDTOs}" dynamic="true"> 
    <p:ajax event="tabChange" listener="#{promotionDetailManagedBean.onTabChange}" /> 
    <p:tab> ... </p:tab> 
</p:tabView> 

Bean:

public final void onTabChange(final TabChangeEvent event) { 
    TabView tv = (TabView) event.getComponent(); 
    this.activeTabIndex = tv.getActiveIndex(); 
} 
+1

Это работает только в том случае, если [активный индекс не привязан к управляемому компоненту] (http://code.google.com/p/primefaces/issues/detail? ID = 1640 & д = activeIndex & colspec = ID% 20Stars% 20Module% 20Type% 20Status% 20Priority% 20TargetVersion% 20Reporter% 20Owner% 20Summary). Я удивлен, что команда Primefaces еще не разрешила (я работаю с версией 3.5). Однако он работает, если сам 'tabView' заключен в форму вместо формы для каждой вкладки. –

+2

this.activeTabIndex = tv.getActiveIndex(); не работает. Вместо этого вы можете использовать this.activeTabIndex = tv.getChildren(). IndexOf (event.getTab()); – ahmet

+0

индекс начинается с 0 или 1? – xav56883728

0
<p:column id="barCode"> 
    <h:inputText id="barCodeInputTxt" value="#{articlePromo.barCode}" 
      styleClass="inputTextStyle" onchange="onSuggestedValueChange('categoryTabView', 
    #{promotionDetailBean.activeTabIndex}, 
    'promotionDetail_dataTable',#{rowIndex}, 
    'originalCostInputTxt')" /> **_____/>_____** 
</p:column> 
  1. у вас есть дополнительная />
  2. немедленной правда может вызвать проблемы с р: Ajax, вы должны использовать немедленным верно, когда вы не имеют подтверждение или вы пытаются отменить операцию.

    public void tabChange(TabChangeEvent event){ 
        TabView tabView = (TabView) event.getComponent(); 
        Tab tab = (Tab) event.getTab(); 
        String tabChangedMessage = tab.getTitle() + " changed. index=" + tabView.getActiveIndex(); 
        System.out.println(tabChangedMessage); 
        FacesContext fc = FacesContext.getCurrentInstance(); 
        fc.addMessage(null, new FacesMessage("Tab changed", tabChangedMessage)); 
    } 
    
    <p:tabView> 
        <p:ajax event="tabChange" listener="#{tabChangeBean.tabChange}" update=":growlId" /> 
        <p:tab title="tab 1"> 
        tab1 inside 
        </p:tab> 
        <p:tab title="tab 2"> 
        tab1 inside 
        </p:tab> 
    </p:tabView> 
    

Это работает, но активный индекс равен 0.

+0

экстра /> это опечатка .. Я тоже пробовал без немедленного. Не работает. –

+0

Я пробовал ваш пример сейчас, но activeIndex всегда 0. Возможно, я ошибаюсь, но я должен попробовать. также я отредактирую свой ответ, вы должны его проверить. – utkusonmez

0
в вашем XHTML вы звоните слушатель

= «# {promotionDetailBean. onTabChange}», но в вашем бобе имя методы «общественное void tabChanged ". Так что он не может срабатывать.

Я попробовал пример на прайм-витрина по адресу:

в фасоли (TabBean):

private Integer activeTabIndex = 1; 

// setter/getter 

public void onTabChange(TabChangeEvent event) { 
    FacesMessage msg = new FacesMessage("Tab Changed", "Active Tab: " + event.getTab().getTitle()); 

    TabView tabView = (TabView) event.getComponent(); 
    int activeTabIndex = tabView.getActiveIndex(); 
    System.out.println("--------" + activeTabIndex); 


    FacesContext context = FacesContext.getCurrentInstance(); 
    Map<String, String> params = context.getExternalContext().getRequestParameterMap(); 
    String activeIndexValue = params.get(tabView.getClientId(context) + "_activeIndex"); 
    System.out.println("--------" + activeIndexValue); 

    context.addMessage(null, msg); 
} 

в XHTML (tabviewChangeListener.XHTML):

<p:tabView id="tabView" dynamic="true" activeIndex="#{tabBean.activeTabIndex}"> 

       <p:ajax event="tabChange" listener="#{tabBean.onTabChange}" update=":form:growl"/> 

       <p:tab title="Godfather Part I" id="Godfather1"> 

В результате, как и ожидалось: отображается На начало вкладку второй. Я щелкаю первую вкладку, а затем третью. SYSOUT является:

-------- 0

-------- 0

-------- 2

---- ---- 2

+0

Также вызывается установщик activeTabIndex, setActiveTabIndex() с правильным значением индекса. – dasgin

+0

и в xhtml вы должны поместить tabView в h: компонент формы – dasgin

2

Это только кажется, работает, если active index is not binded to the managed bean. Но это бесполезно для меня, так как я хочу, чтобы сохранял фоновый режим просмотра бэк-файлов. Я поражен Основная информация команда еще не решила (я работаю с версией 3.5). Однако он работает, если сам p:tabView завернут в h:form вместо одного из них для каждой вкладки, но это заставляет вас изменить контекст отправки.

11

Это работает для меня, когда язычок не содержится внутри формы, но каждая вкладка содержит свои собственные один:

  1. Добавить слушатель событие изменения вкладки для вашего TabView компонента:

    <p:ajax event="tabChange" listener="#{userBean.onTabChange}" />
  2. Получение активного индекса из базового компонента TabView, похоже, не работает. Однако, в случае, новая выбранная вкладка обновляется корректно, поэтому мы можем getthe индекс путем поиска в детских компонентов TabView:

 
    public void onTabChange(TabChangeEvent event) 
    { 
     TabView tabView = (TabView) event.getComponent(); 
     activeTab = tabView.getChildren().indexOf(event.getTab()); 
    } 

Я надеюсь, что это работает для вас слишком

0

я легко исправить это с помощью:

public void onSPTabChange(TabChangeEvent event) 
{ 
    TabView tabView = (TabView) event.getComponent(); 
    currentData.setSP_Index(tabView.getChildren().indexOf(event.getTab())+1); 
} 

в currentdata у меня есть свойство SP_Index с номером вкладки (первый, второй ....)

<p:tabView id="tabView" styleClass="tabView"> 
<p:ajax event="tabChange" listener="#{dataAccess.onSPTabChange}" /> 
.... 

и добавить JQuery скрипт

<script> 
    $("#tabView li:nth-child(#{currentData.SP_Index})").click(); 
</script> 
4

Для primefaces> = 5,0 , пожалуйста, используйте следующий код:

public final void onTabChange(TabChangeEvent event) { 
    TabView tv = (TabView) event.getComponent();  
    this.ActiveIndex = tv.getChildren().indexOf(event.getTab()); 
} 
+0

Кажется, Android :) – delive

-1
public final void onTabChange(final TabChangeEvent event) { 
    TabView tv = (TabView) event.getComponent(); 
    this.activeTabIndex = tv.getIndex(); 
} 

Это работало для меня ...

+0

Как это отличается от того, что находится в других ответах? – Kukeltje

 Смежные вопросы

  • Нет связанных вопросов^_^