3
Changed to likely solution however is not working yet, it seems to me that the line is not updated with ajax.
<h:body>
<h:form id="formTableProd">
<ui:composition template="/templates/master.xhtml">
<ui:define name="conteudo">
<h2>
<p:outputLabel value=" Filtro e ações para produtos" />
</h2>
<h:panelGrid columns="4">
<p:outputLabel value="Filtro:" />
<p:inputText value="#{mbProduto.produto.nomeProduto}" size="50"
maxlength="150" onkeyup="this.value = this.value.toUpperCase()">
</p:inputText>
<p:commandButton icon="ui-icon-search" title="Filtrar"
action="#{mbProduto.filtroPersonalizado}" update="@form">
</p:commandButton>
</h:panelGrid>
<p:dataTable id="tableProduto" value="#{mbProduto.resultado}"
var="produtos" paginator="true" rows="10"
paginatorTemplate="{CurrentPageReport}
{FirstPageLink}
{PreviousPageLink} {PageLinks}
{NextPageLink} {LastPageLink}
{RowsPerPageDropdown}"
rowsPerPageTemplate="5,10,15" style="width: 98%" lazy="true"
rowKey="#{produtos.idProduto}" selectionMode="single">
<p:column>
<f:facet name="header">
<h:outputText value="Cod.:" />
</f:facet>
<p:outputLabel value="#{produtos.idProduto}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Nome:" />
</f:facet>
<p:outputLabel value="#{produtos.nomeProduto}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Esf.:" />
</f:facet>
<p:outputLabel value="#{produtos.especificacaoProduto}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="X.:" />
</f:facet>
<p:outputLabel value="#{produtos.medidaX}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Y.:" />
</f:facet>
<p:outputLabel value="#{produtos.medidaY}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="R$ Venda" />
</f:facet>
<p:outputLabel value="#{produtos.precoDeMetroVenda}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Ações" />
</f:facet>
<p:commandButton icon="ui-icon-close" title="Excluir um produto"
action="#{mbProduto.excluir}" id="produtos" ajax="false"
onclick="if(!confirm('Deseja excluir #{produtos.nomeProduto} ?')) return false">
<f:setPropertyActionListener value="#{produtos}"
target="#{mbProduto.produto}" />
</p:commandButton>
<p:commandButton icon="ui-icon-arrowreturnthick-1-s"
title="Alterar um produto"
action="#{mbProduto.direcionarAlteracao}" update="tableProduto"
process="@this" ajax="true">
<f:ajax execute="@form" update="produtos.idProduto"
render=":tableProduto"></f:ajax>
<f:setPropertyActionListener value="#{produtos}"
target="#{mbProduto.produto}" />
</p:commandButton>
<p:commandButton icon="ui-icon-circle-plus"
title="Adicionar um produto" action="#{mbProduto.novo}" />
</p:column>
</p:dataTable>
</ui:define>
</ui:composition>
</h:form>
my list get and my method to bring the filter, now the two reference the same list.
public List<Produto> getResultado(){
if(resultado == null){
resultado = new ArrayList<Produto>();
EntityManager em = JPAUtil.getEntityManager();
Query q = em.createQuery("select a from Produto a", Produto.class);
this.resultado = q.getResultList();
em.close();
}
return resultado;
}
public String filtroPersonalizado() {
EntityManager em = JPAUtil.getEntityManager();
String consulta = "select p from Produto p where p.nomeProduto = :nome";
TypedQuery<Produto> query = em.createQuery(consulta, Produto.class);
query.setParameter("nome", produto.getNomeProduto());
this.resultado = query.getResultList();
em.close();
return "";
}
The situation is now as follows, it updates the filter click on my EL but it can not find when I press the button to edit the same, in case it sees as the old one, IE always brings the first of the list.
Why don’t you use the filter of Primefaces itself? He already does the job for you. Take a look here.
– electus
Follow the example of Datatable Lazy from Primefaces that has no error: Datatable - Lazy
– NilsonUehara
i would not like to use the primeface filter.
– André Martins
I would not like to use the primefaces filter because I don’t want my application to be attached to this frame.
– André Martins