Problemas com TabView PrimeFaces + JSF2

2 respostas
J

Pessoal, Boa Tarde!

Desenvolvi utilizando o PrimeFaces uma tabView que possui 2 tabs dentro, uma de cadastro de clientes e outra de consulta de clientes. Para ambas as telas eu utilizo um único managed Bean chamado ClienteBean e nele possuo 2 métodos diferentes para cadastrar e consultar, ambos os métodos utilizam o mesmo objeto (ClienteTO) para armazenar as informações pertinentes ao cliente. Quando faço a submissão de uma consulta por exemplo, após o submit ele busca os dados e joga na tela pra mim, e nessa brincadeira acontecem 2 coisas.

Ele me redireciona pra primeira aba (cadastro de clientes) automaticamente e também popula a tela de cadastro e a tela de consulta com os dados do cliente. Existe algum meio de ajeitar isso? Teria que usar um objeto pra cada tipo de operação? Como faço para após o submit ele permanecer na mesma aba?

Agradeço de antemão.

Abraços,
Jefferson Araujo.

2 Respostas

Roberto_Coelho
Tenta fazer com 2 MB diferentes, eu  tive o msm problema um tempinho atras ao tentar usar a mesma MB, fiz 2 e resolveu.!!!!!
J
Roberto Coelho:
Tenta fazer com 2 MB diferentes, eu tive o msm problema um tempinho atras ao tentar usar a mesma MB, fiz 2 e resolveu.!!!!!

Fala Roberto, tdo jóia?

Obrigado pelo auxílio, porém já consegui realizar o processo com 2 MBs mesmo.

Para as demais pessoas que tiverem interesse e dificuldade em fazer retornar a mesma aba após um request, segue abaixo o que devem fazer:

Na página, dentro da tag
<p:tabView>
existe um atributo chamado activeIndex, este atributo contém a informação de qual é a tab que deverá ser exibida, desta forma por exemplo, a página ficará da seguinte forma:
<p:tabView tabChangeListener="#{cadastroCliente.onTabChange}" activeIndex="#{cadastroCliente.tabAtual}">

É interessante sempre dentro das tags TAB filhas colocar um id, pois como sabem o JSF faz isso automaticamente e os nomes não são nada intuitivos.

Posterior a isso, já no MB, o código abaixo deverá ser implementado, para que o tabChangeListener tenha funcionamento:

public void onTabChange(TabChangeEvent event) {

				
		String activeTab = event.getTab().getId();
		
		int activeTabIndex = 0;

		//Realiza um loop para identificar qual é a tab que foi selecionada.
		//Obs.: As tabs filhas devem ter um id definido, para que seja facilitada a busca
		//e o entendimento pois o JSF por padrão coloca IDs com nomes que ele mesmo escolhe 
		//para as tabs.
		for (UIComponent comp : event.getTab().getParent().getChildren()) {
			if (comp.getId().equals(activeTab)) {
				break;
			}
			activeTabIndex++;
		}
		
		System.out.println("ID da Tab Atual: " + event.getTab().getId());
		System.out.println("Index da Tab Atual: " + activeTabIndex);
		
		setTabAtual(activeTabIndex);
	}

Bom, é isso, espero poder ter ajudado.

Abração,
Jefferson Araujo.

Criado 20 de abril de 2011
Ultima resposta 5 de mai. de 2011
Respostas 2
Participantes 2