2015-09-29 2 views
1

Я хочу изменить вкладку, нажав команду commandButton. Я контролирую activeIndex в своем компоненте и делаю обновление компонента tabView. Все работает нормально.Изменить вкладку при нажатии кнопки без обновления tabView

Моя проблема заключается в том, что я хочу изменить activeIndex без необходимости делать обновление на tabView, потому что обновление этого компонента немного медленное.

Можно ли изменить вкладку, нажав на кнопку, и сделать это без обновления?

Вот мой фактический код.

TabView компонент

<p:tabView id="tvFoo" dynamic="true" activeIndex="#{fooBean.activeIndex}"> 


     <p:tab title="Title" id="someTab">           
      <ui:include src="someTabName.xhtml" />   
     </p:tab> 

     <p:tab title="Title2" id="anotherTab">           
      <ui:include src="anotherTabName.xhtml" />  
     </p:tab> 

</tabView> 

внутри someTabName.xhtml

<p:commandButton value="go to anotherTab" actionListener="#{fooBean.tabChange('anotherTabName')}" /> 

fooBean, который контролирует вкладки изменить

public void tabChange(String tabId) {  
     switch (tabId) {  
     case "anotherTabName":          
      activeIndex = 2; 
      RequestContext.getCurrentInstance().update("tvFoo"); //here is the line that I don't want to call      
     break; 
    } 

Могу ли я удалить эту строку, RequestContext.getCurrentInstance().update("tvFoo");? Конечно, если просто удалить, вкладка не будет изменена.

Чтобы возобновить работу, в основном я хочу изменить открытую вкладку. Я думаю, что я могу добиться этого, вызвав событие changeTab вручную, но я не знаю, как это сделать.

ответ

-1

Вы пытались использовать компонент мастера? Я считаю, что поведение, которое вы ищете, похоже на этот мастер правилей.

http://www.primefaces.org/showcase/ui/panel/wizard.xhtml

+1

извините, мастер не то, что я хочу. –

1

Почему бы вам не сделать обновление на компоненте TabView вашей командной кнопки? Я думаю, что вам нужно что-то обновить, иначе как табуляция заметит изменение? Более того, насколько я знаю, функция обновления не совсем медленная.

Чтобы получить текущий индекс TabView вы можете играть с контекстом Faces:

TabView tabView = FacesContext.getCurrentInstance().getViewRoot().findComponent(aComponentId); 

На tabView вы можете получить и установить активную вкладку индивидуально.

Надеюсь, это поможет, удачи!

+0

Спасибо за ваше время. Проблема с обновлением заключается в том, что там есть некоторые «тяжелые» вкладки для этого компонента и выполнение обновления для всего компонента только для изменения вкладки кажется немного странным, не так ли? Могу ли я сделать обновление, которое не перезагружает все вкладки? –

+0

Вы можете установить идентификатор для каждого компонента, к которому вы хотите запросить его, - то же самое для элемента ''. Это означает, что вы можете сделать обновление в командной строке, например ' ... chaeschuechli

+0

Я пытаюсь обновить только вкладку, по ID. Но ничего не происходит, вкладка меняет индекс 2 только тогда, когда я обновляю весь tabView. –

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