onTabChange + AJAX + Required Hibernate

Olá,

Tenho um crud que possui mais de uma tab. Em uma das tabs tem um picklist, e quando troco para outra tab, os registros que foram selecionados nesse picklist precisam ser exibidos em um datatable. Até ai tudo bem, fiz tudo isso e funciona certo.
O problema é que quando eu troco de tab sem preencher os campos que estão no bean como required (@NotEmpy, @NotNull), está exibindo as mensagens referentes a esses campos.
Já tentei por na tag ajax process="@this", immediate=“true”, partialSubmit=“true” e nada resolve.

O código das tabs segue abaixo:

<ui:define name="tab_form_fields_part">
			<p:ajax event="tabChange" process="@this" immediate="true" partialSubmit="true" listener="#{controller.onChangeTab}" update="empresasSelecionadas :formForm:tabView:pojoperfilPanelPickList"/>
			
	<p:tab id="usuarioTab" title="#{recursos.geral}" > 
          aqui tem campos para preenchimento
        </p:tab>

<p:tab id="empresasUsuarioTab" title="#{recursos.empresas_usuario}" rendered="#{controller.canAlterarPerfilEmpresa}" > 
				<m:picklist id="empresaPanel" text="#{recursos.empresa}" value="#{controller.empresas}"
					label="nomeFantasia"/>
			</p:tab>
<p:tab id="perfisUsuarioTab" title="#{recursos.perfil_acesso}"
				rendered="#{controller.canAlterarPerfilEmpresa}" >
				
				<p:dataTable id="empresasSelecionadas" var="prop"
					value="#{controller.empresasSeleciondasList}"
					rowKey="#{prop.id}"	selectionMode="single"
					selection="#{controller.empresaSelected}">
	
					<p:ajax event="rowSelect" listener="#{controller.onChangeRow}" update=":formForm:tabView:pojoperfilPanelPickList"/>
	
					<p:column id="empresaColumn" headerText="#{recursos.empresa}">
						<h:outputText id="textEmpresaColumn" value="#{prop.nomeFantasia}" />
					</p:column>
					
				</p:dataTable>
	
				<m:picklist id="perfilPanel" text="#{recursos.perfil}" value="#{controller.perfis}" label="nomePerfil" />

   				<div class="buttons">
					<m:button id="btnConfirmar"
		           		actionController="#{controller}"
			       		actionMethod="confirmarPerfis"
			       		update=":formForm:tabView:empresasSelecionadas :formForm:tabView:pojoperfilPanelPickList" value="#{recursos.confirmar}">
		   			</m:button>
	            </div>
					
			</p:tab>
</ui:define>

E o método que é chamado no controller:

public void onChangeTab() { this.empresasSeleciondasList = new SelectListDataModel<Empresa>(empresas.getTarget()); removeEmpresas(); if (!empresasSeleciondasList.isEmpty()) { this.setEmpresaSelected(empresasSeleciondasList.get(0)); onChangeRow(); } }

Alguém já passou por isso, ou sabe como contornar este problema?

Ninguém?

depois de realizar a alteração e inclusão do immediate=true você limpou o cache do seu navegador?

Testei isso agora. Infelizmente não resolveu. :frowning:

no teu process, você está incluindo estes campos no update

update="empresasSelecionadas :formForm:tabView:pojoperfilPanelPickList"

em algum destes IDs tem algum valor a ser validado? No process ele será obrigatoriamente validado se houver

Já testei assim, sem dar update nos componentes.

<p:ajax event="tabChange" immediate="true" listener="#{controller.onChangeTab}" />

Acontece a mesma coisa.

Pelo o que testei aqui, simplesmente tendo a tag ajax com um evento associado, no caso o tabChange, mesmo que não faça nada, não dispare nenhuma chamada com listener, não execute update em nenhum componente, acontece a mesma coisa.

coloque ajax=“false” e veja se algum erro é exibido no console, pode ser algo ali, e quando a requisição é via ajax não é exibido o problema (nem sempre).

Não entendi aonde tenho que por ajax=“false”. Estou usando primefaces.

Ninguém mais tem alguma ideia do que pode ser feito para resolver o problema?