Eu preciso fazer com que uma tab do tabview do primefaces, só seja exibida se eu obtiver uma lista não estiver vazia e fazer isso por ajax, eu até consegui fazer com que a tab seja renderizada ou não, porém eu utilizei desse jeito:
<f:ajax event="blur" render="@form" />
Só que desse jeito ao atualizar ele atualiza todas as páginas de todas as tab e eu perco tudo q havia preenchido na tab e o que eu queria era que só atualizasse somente a parte da tab.
Observação: também já tentei passar o id do tabView no render e obtive o mesmo resultado do @form.
E esse é o meu input que tem o ajax que atualizará a tab:
<p:inputText id="autocompleteCodigoEstacao"
placeholder="Entre com o código" maxlength="8" required="true"
requiredMessage="Código da estação é um campo Obrigatório."
disabled="#{inspecaoFluController.visualizarFormulario}"
value="#{inspecaoFluController.codigoEstacaoParaCadastro}">
<p:ajax event="blur"
listener="#{inspecaoFluController.onInsertCode}"
update="nomeEstacaoInspecaoFlu panelLanceRegua panelCotas observadorDataTable @(ui-tabs-panel:visible)" />
<f:validateLength minimum="8" maximum="8" />
</p:inputText>
Eu utilizei o render para esconder a tab, mas n necessariamente precisa ser dessa forma, pode ser o disable também ou qualquer outro modo em que o usuário não consiga acessar a tab
Repare que você esqueceu de colocar um ponto “.” antes de ui.-tabs-panel:visible
EDIT:
Quando você mexe com componentes/layouts dinâmicos, você pode utilizar alguns outros seletores que facilitam muito, como por exemplo: @parent, @child, @next, @previous, @composite, etc.
@parent -> pai do componente atual @form:@child(0) -> primeiro filho do form @next -> proximo componente @previous -> componente anterior
Abaixo tem um uso do seletor @parent, no caso ele atualiza o outputPanel
O primeiro parent (pai) é o h:panelGrid e o segundo é o p:outputPanel
Você também pode fazer combinações de seletores:
@form:@child(0):@child(1):@(.ui-datatable):@next
No exemplo abaixo eu estaria atualizando todo o h:panelGrid
O seletor aponta o update para o form, depois pro primeiro filho do form(tabView), depois pro segundo filho da tabView (segundo p:tab), depois para a datatable e por fim aponta para o componente declarado logo depois da datatable (h:panelGrid)