Galera,
to meio perdido no meio dos naming containers.
O problema, claro, é na hora de fazer o update com o ajax, dentro de componentes (composite components)
Eu ja fiz funcionar… Bom, ao exemplo que esta funcionando…
Eu tenho os componentes: filter.xhtml, datatable.xhtml, econfirmDelete.xhtml
E eu criei um crud.xhtml e contem todos esses…
E funciona lindamente, olha o exemplo de uso:
<po:crud id="crud" entityLabel="#{msg['entity.acao']}" controller="#{acaoController}">
Então, dentro do componente de filtro, por exemplo eu faço o update assim:
:crud:filterForm
Ou dentro da datable (que esta dentro de outro componente)
:crud:mainForm:datatable:table
Beleza… funciona lindamente.
Mas agora, eu quero aproveitar o filtro e a datatable para criar outro compomente do tipo LOOK UP.
A ideia é simples, eu tenho um lookup.xhtml que tem dois campos e um botão.
O primeiro campo é um text field onde a pessoa vai digitar o id.
O segundo é um campo desabilitado só para mostrar algum campo da tabela (Por exemplo, nome).
E o botão é uma lupa… que vai abrir um dialogo contendo o filtro e a tabela…
Vejamos o componente…
<cc:implementation>
<h:panelGrid columns="3" styleClass="table_form">
<p:outputLabel for="#{cc.attrs.fieldId}" value="#{cc.attrs.fieldLabel}"/>
<p:inputText id="#{cc.attrs.fieldId}" disabled="true" value="#{cc.attrs.targetValue.nome}" />
<p:commandButton id="btn_search" icon="ui-icon-search" onclick="lookupDialog.show()"/>
</h:panelGrid>
<p:confirmDialog id="selectDialog" showEffect="bounce" hideEffect="explode" severity="alert"
widgetVar="lookupDialog" appendToBody="true">
<h:form id="filterForm" style="padding-right: 10px;">
<po:filter id="filter" updateFilterForm="#{cc.attrs.clientId}Lookup:filterForm"
fileName="#{cc.attrs.fieldLabel}" controller="#{cc.attrs.lookupController}"
lookup="true" />
</h:form>
<h:form id="mainForm">
<po:datatable id="datatable" controller="#{cc.attrs.controller}" lookup="true">
<ui:include src="#{cc.attrs.lookupController.colunas}" />
<p:column>
<p:commandButton id="selectButton" icon="ui-icon-check"
oncomplete="lookupDialog.hide();" update="#{cc.clientId}:#{cc.attrs.fieldId}">
<f:setPropertyActionListener target="#{cc.attrs.targetValue}" value="#{entity}" />
</p:commandButton>
</p:column>
</po:datatable>
</h:form>
</p:confirmDialog>
</cc:implementation>
Eu estou tentando mas fico recebendo a exception:
javax.faces.FacesException: Cannot find component with identifier "responsavelLookup:filterForm"
referenced from "mainForm:responsavelLookup:filterForm:filter:addFilterBtn".
Também tentei com “:responsavelLookup:filterForm” “mainForm:responsavelLookup:filterForm” e “:mainForm:responsavelLookup:filterForm”…
Mesmo erro.
Talvez isto seja uma questão mais facil ai pra vcs que são desenvolvedores JSF a mais tempo,
mas eu to apanhando mto…
Abração ai e obrigado desde já