Não consigo atualizar o meu dialog através do commandLink em um datatable

O meu objetivo é exibir o elemento selecionado no datatable no dialog, mas não consigo dar o update no meu dialog através do commandLink, sempre que tento, a tela da aplicação fica toda bagunçada e acontece esse erro:

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>

</ui:composition>

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;
  }    
}