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.
você precisa colocar um id no seu dataTable, senão vai ter que ficar caçando qual o id que o JSF gerou.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 ?
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 ?
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 ?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
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
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
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
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.
Esse update tem a mesma função do <p:autoComplete> ?Desculpe, mas auto complete é para fornecer palavras ao usuário. Update é para atualizar componentes do JSF.
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 SenaNã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.
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.