Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Erro ao tentar realizar update na lista.

Boa noite, estou montando outro projeto para aplicar as questões do curso, mas me deparei com a situação abaixo, que inclusive encontra-se igual ao curso, e não estou conseguindo resolver. Estou utilizando a lib primefaces 6.0. Erro: org.primefaces.expression.ComponentNotFoundException: Cannot find component for expression ":frmTabelaLogradouro:tabelaLogradouros" referenced from "j_idt17:frmLogradouro:j_idt41".

O update abaixo esta correto, e o nome do frm e datatable também: update="@form :frmTabelaLogradouro:tabelaLogradouros" Se eu retirar, a pagina abre.

Tela

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://xmlns.jcp.org/jsf/html"
    xmlns:f="http://xmlns.jcp.org/jsf/core"
    xmlns:p="http://primefaces.org/ui"
    xmlns:ui="http://xmlns.jcp.org/jsf/facelets">

<h:form id="frmLogradouro">
    <p:messages id="messages"/>
    <p:panelGrid columns="2">

        <p:outputLabel value="Endereço:" for="endereco"/>
        <p:inputText value="#{empresaBean.logradouro.endereco}" id="endereco" size="100" required="true" requiredMessage="Informe o endereço" validatorMessage="Endereço não pode ultrapassar 100 caracteres">
            <f:validateLength maximum="60"/>
            <f:ajax event="blur" render="messages"/>
        </p:inputText>

        <p:outputLabel value="Nº" for="numero"/>
        <p:inputText value="#{empresaBean.logradouro.numero}" id="numero" required="true" requiredMessage="Informe o número"/>

        <p:outputLabel value="Bairro" for="bairro"/>
        <p:inputText value="#{empresaBean.logradouro.bairro}" id="bairro" required="true" requiredMessage="Informe o bairro"/>

        <p:outputLabel value="Complemento" for="complemento"/>
        <p:inputText value="#{empresaBean.logradouro.complemento}" id="complemento"/>

        <p:outputLabel value="Estado" for="estado"/>
        <p:selectOneMenu id="estado" value="#{geralBean.uf}">
            <f:selectItem itemLabel="Selecione um estado" />
            <f:selectItems value="#{geralBean.estados}" var="listaEstados" itemValue="#{listaEstados}" itemLabel="#{listaEstados.descricao}" />
               <p:ajax update="municipios" event="change" listener="#{geralBean.filtraEstado}" />
        </p:selectOneMenu>

        <p:outputLabel value="Municipio" for="municipios"/>
        <p:selectOneMenu id="municipios" value="#{geralBean.municipio}">
            <f:selectItem itemLabel="Selecione um municipio" />
            <f:selectItems value="#{geralBean.municipios}" var="listaMun" itemValue="#{listaMun}" itemLabel="#{listaMun.descricao}" />
        </p:selectOneMenu>

        <p:commandButton value="Gravar" action="#{empresaBean.adicionarLogradouro(geralBean.municipio)}" process="@form" update="@form :frmTabelaLogradouro:tabelaLogradouros"/>
    </p:panelGrid>
    <br/>
</h:form>

<h:form id="frmTabelaLogradouro">    
    <p:dataTable value="#{empresaBean.pessoa.listaLogradouros}" var="logradouro" emptyMessage="Nenhum endereço" id="tabelaLogradouros">
        <p:column headerText="Endereço" filterBy="#{logradouro.endereco}" filterMatchMode="startsWith" sortBy="#{logradouro.endereco}">
            <p:outputLabel value="#{logradouro.endereco}"/>
        </p:column>

        <p:column headerText="Número">
            <p:outputLabel value="#{logradouro.numero}"/>
        </p:column>

        <p:column headerText="Bairro" filterBy="#{logradouro.bairro}" filterMatchMode="startsWith">
            <p:outputLabel value="#{logradouro.bairro}"/>
        </p:column>

        <p:column headerText="Municipio" filterBy="#{logradouro.municipio.descricao}" filterMatchMode="startsWith">
            <p:outputLabel value="#{logradouro.municipio.descricao}"/>
        </p:column>

        <p:column headerText="Remover">
            <p:commandLink value="Remover" action="#{empresaBean.removerLogradouro(logradouro)}"/>
        </p:column>
    </p:dataTable>
</h:form>
</html>
3 respostas

Fabricio tenta essa seguinte alteração!

<p:commandButton value="Gravar" action="#{empresaBean.adicionarLogradouro(geralBean.municipio)}" process="@form" update="frmLogradouro :frmTabelaLogradouro"/>

Tenta assim

Não deu certo, continua o mesmo erro, inclusive voltei para a versão 5.3 do prime faces e mesmo assim não funcionou.

solução!

Achei a solução, como está dentro de uma tabView, preciso passar por ela até chegar no formulário. A solução ficou assim: update="@form :tableView:frmTabelaLogradouro:tabelaLogradouros"