Pessoal,
por que que tenho que colocar :j_idt7 antes nos componentes que quero dar um update?
Alguém sabe o por que, ou se consigo tirar isso?
Obrigado
Pessoal,
por que que tenho que colocar :j_idt7 antes nos componentes que quero dar um update?
Alguém sabe o por que, ou se consigo tirar isso?
Obrigado
Coloque um componente antes desse cara e você vai ver que esse número muda.
O JSF cria um id para cada componente de modo automático, caso você não defina um id.
Se você tiver: <input 1> <input 2> você verá que para dar update no input 1 você deverá fazer form:input 1. O form tem a opção preprendId que se você colocar igual a false, basta fazer update on input 1. O problema é que os outros componentes containers (panel, div, etc) não tem essa opção. Então se você tiver <panel 1> <input 1> <input 2> você teria que fazer o update no form:panel 1:input 1.
Ao invés de deixar :j_idt7 coloque um nome no componente.
Esse id é necessário para que o JSF consiga utilizar ajax e montar uma árvore de componente corretamente.
Isso tem a ver com os NamingContainers do JSF.
Alguns componentes do JSF implementam NamingContainer.
Essa interface indica que quando esse componente for renderizado, os componentes dentro dele terão o id relacionado a ele. exemplo:<h:form id="form">
<h:inputText id="text">
</h:form:Quando isso for renderizado, o id do inputText será :form:text porque o componente está dentro do form que é um dos NamingContainers.
Agora por que o :j_idt7? Se você não definir um id para um NamingContainer, o JSF irá gerar um automaticamente, e o nome é parecido com esse que você exemplificou.
Você pode alterar o id do componente para ficar um nome mais legível, e evitar problemas (se você alterar a tela, esse id pode ser alterado também).
no caso do form, você pode pesquisar pela propriedade prependId. Agora se for algum outro container, como o dataTable, você não terá essa opção.
Hebert e Rodrigo,
Entendi vocês perfeitamente.
Mas como irei identificar esse id gerado nesse htlm?
<ui:composition
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core">
<p:panel id="bbb" header="Lista de estados" footer="Mensagens" style="width: auto; max-width: 800px">
<h:panelGrid id="listaEstado" columns="5" cellpadding="5">
<p:outputLabel value="Descrição" for="tfDescricao" />
<p:inputText id="tfDescricao" style="width: 100%;" value="#{estadoMB.descricao}"/>
<p:commandButton value="Busca" update="cadastro,dataTable" actionListener="#{estadoMB.listByDescricao()}"/>
<p:outputLabel value="Contém" for="cbContem" />
<p:selectBooleanCheckbox id="cbContem" value="#{estadoMB.contem}" />
</h:panelGrid>
<p:dataTable id="dataTable" var="estado" value="#{estadoMB.estados}" style="width: auto;"
paginator="true" rows="10" paginatorPosition="bottom"
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} ">
<p:column style="width: 15%; overflow: hidden">
<f:facet name="header">
<h:outputText value="Código" />
</f:facet>
<h:outputText value="#{estado.id}" />
</p:column>
<p:column style="width: 60%; overflow: hidden">
<f:facet name="header">
<h:outputText value="Descrição" />
</f:facet>
<h:outputText value="#{estado.nome}" />
</p:column>
<p:column style="width: 25%; overflow: hidden">
<f:facet name="header">
<h:outputText value="Opções" />
</f:facet>
<p:commandButton update="dataTable" action="#{estadoMB.removeSelecionado()}" icon="ui-icon-disk"/>
<p:commandButton update=":j_idt7:cadastro" action="#{estadoMB.visualiza()}" icon="ui-icon-find" onclick="dlg3.show()"/>
</p:column>
</p:dataTable>
</p:panel>
<p:dialog header="Cadastro de Estados" widgetVar="dlg3" showEffect="clip" hideEffect="explode" height="500">
<h:panelGrid id="cadastro" columns="2" cellpadding="5">
<h:outputLabel value="Código" for="tfCodigo" />
<p:inputText id="tfCodigo" value="#{estadoMB.estado.id}" size="5" readonly="true"/>
<h:outputLabel value="Estado" for="tfNome" />
<p:inputText id="tfNome" value="#{estadoMB.estado.nome}"/>
<h:outputLabel value="Sigla" for="tfSigla" />
<p:inputText id="tfSigla" value="#{estadoMB.estado.sigla}"/>
<h:outputLabel value="Pais" for="tfSigla" />
<p:selectOneMenu id="tfPais" value="#{estadoMB.idPaisSelecionado}" >
<f:selectItem itemLabel="Escolha um pais" itemValue=""/>
<f:selectItems value="#{estadoMB.listPais()}" />
</p:selectOneMenu>
</h:panelGrid>
<p:commandButton value="Novo" actionListener="#{estadoMB.clear()}" id="btNovo" title="Novo país" update="cadastro"/>
<p:commandButton value="Salvar" actionListener="#{estadoMB.post()}" id="btSalvar" title="Salvar País" onclick="dlg3.close()"/>
<p:commandButton value="Buscar" actionListener="#{estadoMB.get()}" id="btBuscar" title="Buscar" update="cadastro"/>
<p:commandButton value="Remover" actionListener="#{estadoMB.remove()}" id="btRemover" title="Remover" update="cadastro"/>
</p:dialog>
</ui:composition>
você precisa colocar um id no seu dataTable, senão vai ter que ficar caçando qual o id que o JSF gerou.
[quote=Rodrigo Sasaki]você precisa colocar um id no seu dataTable, senão vai ter que ficar caçando qual o id que o JSF gerou.[/quote]Exato. Você não tenta descobrir. Você define um, você é quem manda. [=
Eu tenho uma dúvida, se eu der um update em um componente container, um panel por exemplo, isso quer dizer que todos os filhos dele serão atualizados também ?
[quote=lele_vader]Eu tenho uma dúvida, se eu der um update em um componente container, um panel por exemplo, isso quer dizer que todos os filhos dele serão atualizados também ?
[/quote]
Sim.
[quote=lele_vader]Eu tenho uma dúvida, se eu der um update em um componente container, um panel por exemplo, isso quer dizer que todos os filhos dele serão atualizados também ?
[/quote]Você testou? Qual foi o resultado?
Hebert e Rodrigo,
Pra mim… o dataTable tem um id, conforme a linha 15 = <p:dataTable id=“dataTable”
E o que interfere o id da dataTable no update da linha 36?
Giovani
[quote=giovani_sc]Hebert e Rodrigo,
Pra mim… o dataTable tem um id, conforme a linha 15 = <p:dataTable id=“dataTable”
E o que interfere o id da dataTable no update da linha 36?
Giovani[/quote]
Cade seu form?
Eu preciso de um form?
Se quiser executar algo do lado do servidor, precisa sim 
Entendi!
Desculpe.
Isso é um composition
O meu form está em outro xhtml. coloquei o id dele la e funcionou.
Hebert e Rodrigo,
Obrigado pelas dicas… foram muito valiosas.
Um bom dia pra vcs…
Esse update tem a mesma função do <p:autoComplete> ?
Na empresa onde estou de estagiário, usamos o <p:autoComplete> mas sempre
dá problemas.
Grato.
Tiago Sena
[quote=TiagoSena]Esse update tem a mesma função do <p:autoComplete> ?
Na empresa onde estou de estagiário, usamos o <p:autoComplete> mas sempre
dá problemas.
Grato.
Tiago Sena[/quote]
Não não, o p:autoComplete é um componente que faz sugestões enquanto o usuário está digitando algo.
Como se você digitasse “BR” em um campo de texto e ele sugerisse “BRASIL”.
o update define quais campos você quer que sejam renderizados novamente, ao retorno de uma requisição ajax.
[quote=TiagoSena]Esse update tem a mesma função do <p:autoComplete> ?[/quote]Desculpe, mas auto complete é para fornecer palavras ao usuário. Update é para atualizar componentes do JSF.
[quote=Rodrigo Sasaki][quote=TiagoSena]Esse update tem a mesma função do <p:autoComplete> ?
Na empresa onde estou de estagiário, usamos o <p:autoComplete> mas sempre
dá problemas.
Grato.
Tiago Sena[/quote]
Não não, o p:autoComplete é um componente que faz sugestões enquanto o usuário está digitando algo.
Como se você digitasse “BR” em um campo de texto e ele sugerisse “BRASIL”.
o update define quais campos você quer que sejam renderizados novamente, ao retorno de uma requisição ajax.[/quote]
Nossa muito bom sua explicação.
Eu também estava tendo problemas com o rendered e o update.
Valeu pois eu não sabia que era o update que setava os campos que vão ser atualizados.
Abraço.