У меня есть простая модель, в которой пытается обновить 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);
}
}
}
[Не использовать] (http://stackoverflow.com/a/14790993/1199132) «обновление» над элементом, который имеет условие «rendered». Когда '# {cadastroClienteBean.listaVazia()}' оценивается как false, ваша таблица просто не будет обновляться путем поиска, поскольку она недоступна в дереве DOM. Вместо этого сверните свою таблицу в «h: panelGroup» или «ui: fragment» и примените обновление к компоненту обертки. –
Большое спасибо. он работает отлично. Я удалил 'render' моей таблицы данных и поместил идентификатор id. В мой 'commandButton' я вставил тег' update', поместив тег 'tag' моего dataTable, созданный ранее. –
Возможный дубликат [Ajax update/render не работает на компоненте с атрибутом rendered] (https://stackoverflow.com/questions/14790014/ajax-update-render-does-not-work-on-a-component -which-has-rendered-attribute) – Kukeltje