JSF - Erro componentes mesmo nome

Bom dia pessoal,

Estou tentando fazer uma página principal, com um menu acima com as funções do sistema e uma p:tabView com abas dinâmicas, que serão adicionadas de acordo com as funções solicitadas.

Nem entrei ainda no mérito de como vou fazer essas abas dinâmicas, isso eu “me bato” depois. (Sou iniciante nessa tecnologia)

No entanto, estou me deparando com o seguinte problema. Quando coloco duas ou mais abas, que tem componentes “raiz” com o mesmo nome, obtenho um erro por conter componentes do mesmo nome. Existe alguma maneira de isolar a tab? Ou seja, ela não ter contato com a outra tab?

Tenho um projeto que estou fazendo para aprender apenas, mas para simplificar esta postagem, estou enviando um exemplozinho que fiz pra ilustrar.

principal.xhtml

[code]<?xml version="1.0" encoding="ISO-8859-1" ?>

<h:body>

<p:tabView id="tabView">

	<p:tab title="Teste1" closable="true">
	
		<ui:include src="teste1.xhtml"/>
		
	</p:tab>
	
	<p:tab title="Teste2" closable="true">
	
		<ui:include src="teste2.xhtml"/>
		
	</p:tab>
	
</p:tabView>

</h:body>

[/code]

teste1.xhtml

[code]<ui:fragment
xmlns=“http://www.w3.org/1999/xhtml
xmlns:h=“http://java.sun.com/jsf/html
xmlns:f=“http://java.sun.com/jsf/core
xmlns:ui=“http://java.sun.com/jsf/facelets
xmlns:p=“http://primefaces.org/ui”>

<h:form id="form">

	<h:outputLabel value="Teste1 - Rodrigo"/>

</h:form>

</ui:fragment>[/code]

teste2.xhtml

[code]<ui:fragment
xmlns=“http://www.w3.org/1999/xhtml
xmlns:h=“http://java.sun.com/jsf/html
xmlns:f=“http://java.sun.com/jsf/core
xmlns:ui=“http://java.sun.com/jsf/facelets
xmlns:p=“http://primefaces.org/ui”>

<h:form id="form">

	<h:outputLabel value="Teste2 - Rodrigo"/>

</h:form>

</ui:fragment>[/code]

Muda os nomes ou deixa o JSF gerar o ID.

Obrigado por responder!

O problema é que terei de citar esses componentes posteriormente nos updates, exemplo:

&lt;p:commandButton value="Salvar" icon="ui-icon-disk" actionListener="#{ClienteBean.salvar}" update="form"/&gt;

e como uso templates, e boa parte da composição visual fica neste template (que tem componentes nomeados), não tenho a opção de “mudar” o nome dos componentes, por estarem na template.

Existe uma outra maneira?

Já que você não pode mudar o id no template, muda nos fragments

Para atualizar o form dinamicamente você pode mudar de:

<p:commandButton value="Salvar" icon="ui-icon-disk" actionListener="#{ClienteBean.salvar}" update="form"/> 

para:

<p:commandButton value="Salvar" icon="ui-icon-disk" actionListener="#{ClienteBean.salvar}" update="@form"/> 

@form é um seletor especial que indica o form do componente atual.