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;
}
}
What would be the correct way to declare the ids? I’m not finding the right way to declare them
– user70765
Forms should not be nested.
– eugenioflima