I cannot update my dialog via commandLink on a datatable

Asked

Viewed 44 times

2

My goal is to display the selected element in the datatable in the dialog, but I can’t update my dialog via commandLink, whenever I try, the application screen gets all messy and this error happens:

Advertência: StandardWrapperValve[Faces Servlet]: PWC1406: Servlet.service() for servlet Faces Servlet threw exception
javax.faces.FacesException: Cannot find component with identifier ":formArtsAptas:formCriarNovoLivro" referenced from "formArtsAptas:tableArtsAptas:0:criarVerLivroOrdemButton".

View

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
        xmlns:f="http://java.sun.com/jsf/core"
        xmlns:h="http://java.sun.com/jsf/html"
        xmlns:ui="http://java.sun.com/jsf/facelets"
        xmlns:p="http://primefaces.org/ui"
        xmlns:jsp="http://java.sun.com/JSP/Page"
        template="template.xhtml">
    <ui:define name="titulo">
        ARTs Aptas a Livro de Ordem
    </ui:define>

<ui:define name="content">
    <h:form id="formArtsAptas">
        <p:dataTable value="#{artsAptasLivroOrdemController.artsAptas}" 
             id="tableArtsAptas" 
             rowKey="#{item.numeroArt}" var="item"
             emptyMessage="Você não possui ARTs aptas a Livro de Ordem"
             paginator="true" rows="20"
             selection="#{artsAptasLivroOrdemController.artApta}">

        <f:facet name="header">
            ARTs Aptas a Livro de Ordem
        </f:facet>

        <p:column headerText="Numero da ART" sortBy="#{item.numeroArt}">
              <h:outputText value="#{item.numeroArt}" />
        </p:column>

        <p:column headerText="Tipo de ART" sortBy="#{item.tipoArt.descricao}">
              <h:outputText value="#{item.tipoArt.descricao}" />
        </p:column>

        <p:column headerText="Subtipo de ART" sortBy="#{item.subtipoArt.descricao}">
              <h:outputText value="#{item.subtipoArt.descricao}" />
        </p:column>

        <p:column headerText="Data de Elaboração" sortBy="#{item.dataElaboracao}">
              <h:outputText value="#{item.dataElaboracao}">
                    <f:convertDateTime pattern="dd/MM/yyyy" />
              </h:outputText>
        </p:column>

        <p:column headerText="Profissional Contratado" sortBy="#{item.nomeProfissionalContratado}">
              <h:outputText value="#{item.nomeProfissionalContratado}" />
        </p:column>

        <p:column headerText="Empresa Contratada" sortBy="#{item.nomeEmpresaContratada}">
              <h:outputText value="#{item.nomeEmpresaContratada}" />
        </p:column>

        <p:column headerText="Contratante" sortBy="#{item.contrato.identificacaoContratante.nome}">
              <h:outputText value="#{item.contrato.identificacaoContratante.nome}" />
        </p:column>

        <p:column headerText="Criar/Ver Livro de Ordem">
            <p:commandLink id="criarVerLivroOrdemButton"
                           immediate="true"
                           oncomplete="dialogLivroOrdem.show();"
                           actionListener="#{artsAptasLivroOrdemController.abrirDialogNovoLivroOrdem(artApta)}">
                <f:setPropertyActionListener value="#{item}" target="#{artsAptasLivroOrdemController.artApta}" />

                <p:graphicImage alt="Criar/Ver" value="../imagens/site/edit.gif" />

            </p:commandLink>               
        </p:column>

    </p:dataTable>

    <p:dialog id="dialogLivroOrdem"
              modal="true" header="Novo Livro de Ordem"
              widgetVar="dialogLivroOrdem" minHeight="40">

        <h:form id="formCriarNovoLivro">

            <b>
                <h:outputLabel value="Numero da ART: " />
            </b>
                <h:outputText id="numeroArt" value="#{artsAptasLivroOrdemController.artApta.numeroArt}" />
            <br />
            <br />

            <b>
               <h:outputLabel for="dataRealInicioObra" value="Data Real do Início da Obra: " />
            </b>
            <p:calendar id="dataRealInicioObra"
                        required="true"
                        requiredMessage="Campo Obrigatório"
                        pattern="dd/MM/yyyy"
                        locale="pt_BR"
                        showOn="button" />
            <br />
            <br />

            <b>
                <h:outputLabel for="dataPrevistaConclusaoObra" value="Data Prevista para Conclusão da Obra: " />
            </b>
            <p:calendar id="dataPrevistaConclusaoObra"
                        required="true"
                        requiredMessage="Campo Obrigatório"
                        pattern="dd/MM/yyyy"
                        locale="pt_BR"
                        showOn="button" />      

            <br />
            <br />
            <p:commandButton value="Criar Novo Livro" />
            <p:commandButton value="Cancelar" />

        </h:form>


    </p:dialog>

</h:form>

Controller

@ManagedBean
@ViewScoped
public class ArtsAptasLivroOrdemController implements Serializable {
    @EJB
private ArtDao artDao;
@EJB
private LivroOrdemDao livroOrdemDao;
@EJB
private ObjectDao objectDao;

private List<Art> artsAptas = new ArrayList<Art>();
private Pessoa pessoa;
private LivroOrdem livroOrdem;
private Date dataRealInicio;
private Date dataPrevistaConclusao;
private Art artApta;

public ArtsAptasLivroOrdemController() {
}

@PostConstruct
public void inicializar() {
    artsAptas.clear();
    FacesContext context = FacesContext.getCurrentInstance();
    ELResolver resolver = context.getApplication().getELResolver();
    LoginControllerOnline controller = new LoginControllerOnline();
    controller = (LoginControllerOnline) resolver.getValue(context.getELContext(), null, "loginControllerOnline");
    pessoa = controller.getPessoa();

    if(pessoa instanceof Profissional) {
        Profissional profissional = (Profissional) pessoa;
        Map<String, Object> params = new HashMap<String, Object>();
        String queryArt = "SELECT a.numeroart, a.dataElaboracao, p.nome as nomeprofissional, pe.nome as nomeempresa, "
            + "(SELECT nome FROM IdentificacaoContratoArtWeb contrato WHERE contrato.numeroart = a.numeroart AND sequencialcontrato = 1 AND sequencialidentificacao = 1) AS nomecontratante, "
            + "t.idTipoArt, t.descricao AS tipoArt, st.idSubtipoArt, st.descricao AS subtipoArt, "
            + "a.nomeProfissionalContratado, a.nomeEmpresaContratada "
            + "FROM Art a "
            + "LEFT JOIN pessoa p ON p.codigo = a.codigoprofissionalcontratado "
            + "LEFT JOIN pessoa pe ON pe.codigo = a.codigoempresacontratada "
            + "LEFT JOIN empresa e ON e.codigo = pe.codigo "
            + "LEFT JOIN TipoArt t ON t.idTipoArt = a.tipoArt_idTipoArt "
            + "LEFT JOIN SubtipoArt st ON st.idSubtipoArt = a.subtipoArt_idSubtipoArt "
            + "WHERE (a.codigoprofissionalcontratado = :codigo AND a.databaixa IS NULL) AND (a.datapagamento IS NOT NULL OR a.valortaxa = 0)";            

        params.put("codigo", profissional.getCodigo());

        List<Object[]> arts = objectDao.listPesqQuery(queryArt, params);

        for (Object[] o : arts) {
            Art artTemp = new Art();
            artTemp.setNumeroArt((String) o[0]);
            artTemp.setDataElaboracao((Date) o[1]);
            artTemp.getProfissionalContratado().setNome((String) o[2]);
            artTemp.getEmpresaContratada().setNome((String) o[3]);

            ContratoArt c = new ContratoArt(artTemp, 1L);
            IdentificacaoContratoArt i = new IdentificacaoContratoArt();
            i.setTipoIdentificacao(TipoIdentificacao.CONTRATANTE);
            i.setNome((String) o[4]);
            c.getIdentificacoes().add(i);
            artTemp.getContratos().add(c);

            artTemp.setTipoArt(new TipoArt());
            BigInteger idTipoArt = (BigInteger) o[5];

            if (idTipoArt != null) {
              artTemp.getTipoArt().setIdTipoArt(idTipoArt.longValue());
        }

        artTemp.getTipoArt().setDescricao((String) o[6]);
        artTemp.setSubtipoArt(new SubtipoArt());
        BigInteger idSubtipoArt = (BigInteger) o[7];

        if (idSubtipoArt != null) {

artTemp.getSubtipoArt().setIdSubtipoArt(idSubtipoArt.longValue());
        }

        artTemp.getSubtipoArt().setDescricao((String) o[8]);
        artTemp.setNomeProfissionalContratado((String) o[9]);
        artTemp.setNomeEmpresaContratada((String) o[10]);
        artsAptas.add(artTemp);
    }


  }
 }


    public ArtDao getArtDao() {
        return artDao;
    }

    public void setArtDao(ArtDao artDao) {
        this.artDao = artDao;
    }

    public ObjectDao getObjectDao() {
        return objectDao;
    }

    public void setObjectDao(ObjectDao objectDao) {
         this.objectDao = objectDao;
    }

    public List<Art> getArtsAptas() {
         return artsAptas;
    }

    public void setArtsAptas(List<Art> artsAptas) {
        this.artsAptas = artsAptas;
    }

    public Pessoa getPessoa() {
        return pessoa;
    }

    public void setPessoa(Pessoa pessoa) {
        this.pessoa = pessoa;
    }  

    public LivroOrdem getLivroOrdem() {
        return livroOrdem;
    }

    public void setLivroOrdem(LivroOrdem livroOrdem) {
         this.livroOrdem = livroOrdem;
    }  

    public LivroOrdemDao getLivroOrdemDao() {
         return livroOrdemDao;
    }

    public void setLivroOrdemDao(LivroOrdemDao livroOrdemDao) { 
         this.livroOrdemDao = livroOrdemDao;
    }

    public Date getDataRealInicio() {
        return dataRealInicio;
    }

    public void setDataRealInicio(Date dataRealInicio) {
        this.dataRealInicio = dataRealInicio;
    }

    public Date getDataPrevistaConclusao() {
        return dataPrevistaConclusao;
    }

    public void setDataPrevistaConclusao(Date dataPrevistaConclusao) {
        this.dataPrevistaConclusao = dataPrevistaConclusao;
    }

    public Art getArtApta() {
        return artApta;
    }

    public void setArtApta(Art artApta) {
        this.artApta = artApta;
    }    
  }

1 answer

0

Cannot find component with identifier ":formArtsAptas:formCriarNovoLivro" 
    referenced from "formArtsAptas:tableArtsAptas:0:criarVerLivroOrdemButton".

the way you stated the id's is wrong, as they are in form’s right, so it does not find.

  • What would be the correct way to declare the ids? I’m not finding the right way to declare them

  • 1

    Forms should not be nested.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.