2016-02-21 4 views
0

У меня есть простая модель, в которой пытается обновить dataTable после получения некоторых результатов в моей таблице данных, я использую EJB, чтобы получить этот результат в моей базе данных.После поиска p: dataTable не будет обновляться, если поиск не будет вызван дважды или что-то в фильтр набрано и очищено

Проблема заключается в том, что после поиска моя dataTable не будет обновляться, если только эта кнопка не нажимает кнопку поиска 2 раза или не набирает что-либо в фильтр fieldText и после ее очистки.

Я попытался использовать некоторую функцию как «onclick и update», но все решения не работают.

Важной ситуацией является ситуация: если фильтр fieldText удален из моей dataTble, dataTable отлично обновляется без erros :).

Кто-то может сказать другой способ или решение решить мою проблему?

код XHTML:

<h:form id="frmPesquisa"> 
    <p:panelGrid columns="3"> 
     <h:outputLabel value="Pesquisar" for="pesquisa" /> 
     <h:inputText id="pesquisa" 
      value="#{cadastroClienteBean.valorPesquisa}" /> 
     <p:commandButton value="Pesquisar" 
      action="#{cadastroClienteBean.pesquisar}" update="tableResult" 
      onclick="PF('itemListases').clearFilters(); PF('itemListases').filter();"/> 
    </p:panelGrid> 
    <br /> 
    <br /> 
    <br /> 
    <p:dataTable rendered="#{cadastroClienteBean.listaVazia()}" paginator="true" rows="5" widgetVar="itemListases" 
     emptyMessage="Não foram encontrados Itens" 
     filteredValue="#{cadastroClienteBean.filtrados}" id="tableResult" 
     value="#{cadastroClienteBean.clientes}" var="cliente" border="1" 
     cellpadding="5"> 
     <p:column headerText="Código" filterBy="#{cliente.codigo}"> 
      <h:outputText value="#{cliente.codigo}" /> 
     </p:column> 
     <p:column headerText="Nome"> 
      <h:outputText value="#{cliente.nome}" /> 
     </p:column> 
     <p:column headerText="Idade"> 
      <h:outputText value="#{cliente.idade}" /> 
     </p:column> 
     <p:column headerText="Sexo"> 
      <h:outputText value="#{cliente.sexo}" /> 
     </p:column> 
     <p:column headerText="Profissão"> 
      <h:outputText value="#{cliente.profissao}" /> 
     </p:column> 
    </p:dataTable> 
</h:form> 

Bean Код:

@Named 
@SessionScoped 
public class CadastroClienteBean implements Serializable { 

    private static final long serialVersionUID = 1L; 

    private Cliente cliente; 
    private List<Cliente> clientes; 
    private List<Cliente> filtrados; 
    private String valorPesquisa; 
    private String pesquisaAnterior; 

    @EJB 
    CadastroClienteEJB cadastroClienteEJB; 

    public CadastroClienteBean() { 
     System.out.println("===> Chamou o CONSTRUTOR"); 
     cliente = new Cliente(); 
     clientes = new ArrayList<Cliente>(); 
     filtrados = new ArrayList<Cliente>(); 
    } 

    public void pesquisar() { 
     if (!valorPesquisa.equals(pesquisaAnterior)) { 
      filtrados = new ArrayList<Cliente>(); 
      if (this.valorPesquisa == null || this.valorPesquisa.equals("")) { 
       pesquisaAnterior = new String(valorPesquisa); 
       this.clientes = cadastroClienteEJB.buscarTodos(); 
      } else { 
       pesquisaAnterior = new String(valorPesquisa); 
       this.clientes = this.cadastroClienteEJB 
         .pesquisar(this.valorPesquisa); 
      } 
     } 
    } 
+1

[Не использовать] (http://stackoverflow.com/a/14790993/1199132) «обновление» над элементом, который имеет условие «rendered». Когда '# {cadastroClienteBean.listaVazia()}' оценивается как false, ваша таблица просто не будет обновляться путем поиска, поскольку она недоступна в дереве DOM. Вместо этого сверните свою таблицу в «h: panelGroup» или «ui: fragment» и примените обновление к компоненту обертки. –

+0

Большое спасибо. он работает отлично. Я удалил 'render' моей таблицы данных и поместил идентификатор id. В мой 'commandButton' я вставил тег' update', поместив тег 'tag' моего dataTable, созданный ранее. –

+0

Возможный дубликат [Ajax update/render не работает на компоненте с атрибутом rendered] (https://stackoverflow.com/questions/14790014/ajax-update-render-does-not-work-on-a-component -which-has-rendered-attribute) – Kukeltje

ответ

0

Спасибо очень много. он работает отлично. Я удалил рендер моей таблицы данных и поместил тег id. В мой commandButton я вставил тег обновления, поместив тег id моего dataTable, созданный ранее.

+0

Pleaae добавить код – Kukeltje