Я использую отложенную загрузку с разбиением на страницы в dataTable и работает нормально. Проблема в том, что у меня есть функция расширенного поиска на той же HTML-странице, и когда я нажимаю на кнопку поиска, я хочу, чтобы моя dataTable обновлялась в соответствии со значениями, которые я ввел в полях расширенного поиска (эта функция реализована в DaoFactory.getDocumentoDao().buscarLazy(first, pageSize)
,
код ниже. Но атрибут update у моей кнопки, похоже, ничего не делает, потому что метод загрузки ленивой модели не вызывается. Итак, вопрос: могу ли я как-то вызвать метод загрузки ленивой модели снаружи модели для обновления моего dataTable?
FORM:
<h:form id="frmCli">
<p:commandButton value="Buscar"
update="frmCli:panelResultadosDoc"/>
<h:panelGroup id="panelResultadosDoc">
<div class="dataTable">
<p:dataTable id="documentos"
value="#{documentoBuscadorBean.lazyModel}"
lazy="true"
var="varDocBean"
paginator="true"
paginatorPosition="bottom"
paginatorAlwaysVisible="false"
rows="5">
<p:column>
<f:facet name="header">Código</f:facet>
<h:outputText value="#{varDocBean.documento.id}"/>
</p:column>
</p:dataTable>
</div>
</h:panelGroup>
</h:form>
Боб, содержащий модель:
@ManagedBean
@SessionScoped
public class DocumentoBuscadorBean {
private LazyDataModel<DocumentoBean> lazyModel;
@SuppressWarnings("serial")
public DocumentoBuscadorBean() {
lazyModel = new LazyDataModel<DocumentoBean>() {
public List<DocumentoBean> load(int first, int pageSize, String sortField, boolean sortOrder, Map<String,String> filters) {
List<DocumentoBean> lazyListDocumentos = new ArrayList<DocumentoBean>();
try {
lazyListDocumentos = DaoFactory.getDocumentoDao().buscarLazy(first, pageSize);
} catch (DocumentoException e) {
e.printStackTrace();
}
return lazyListDocumentos;
}
};
lazyModel.setRowCount(DaoFactory.getDocumentoDao().rowCount());
lazyModel.setPageSize(5);
}
public LazyDataModel<DocumentoBean> getLazyModel() {
return lazyModel;
}
}