Java 从另一个组件更新dataTable(使用延迟加载)
我在一个数据表中使用带分页的延迟加载,效果很好。问题是,我在同一html页面中有一个高级搜索功能,当我单击搜索按钮时,我希望根据我在高级搜索字段中输入的值更新我的dataTable(此功能在Java 从另一个组件更新dataTable(使用延迟加载),java,jsf,primefaces,Java,Jsf,Primefaces,我在一个数据表中使用带分页的延迟加载,效果很好。问题是,我在同一html页面中有一个高级搜索功能,当我单击搜索按钮时,我希望根据我在高级搜索字段中输入的值更新我的dataTable(此功能在DaoFactory.getDocumentoDao().Buscallazy(第一个,pageSize)中实现, 代码如下。但是我按钮上的更新属性似乎没有任何作用,因为没有调用惰性模型的加载方法。所以问题是:我是否可以从模型外部调用惰性模型的加载方法,以便更新我的数据表 表格: 科迪戈 包含模型的BEA
DaoFactory.getDocumentoDao().Buscallazy(第一个,pageSize)
中实现,
代码如下。但是我按钮上的更新属性似乎没有任何作用,因为没有调用惰性模型的加载方法。所以问题是:我是否可以从模型外部调用惰性模型的加载方法,以便更新我的数据表
表格:
科迪戈
包含模型的BEAN:
@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;
}
}
@ManagedBean
@会议范围
公共类DocumentoBuscadorBean{
私人LazyDataModel lazyModel;
@抑制警告(“串行”)
公共文档obuscadorbean(){
lazyModel=新的LazyDataModel(){
公共列表加载(int-first、int-pageSize、字符串排序字段、布尔排序器、映射筛选器){
List lazyListDocumentos=new ArrayList();
试试{
lazyListDocumentos=DaoFactory.getDocumentoDao().buscallazy(第一个,页面大小);
}捕获(文档异常e){
e、 printStackTrace();
}
返回懒散文件;
}
};
LazModel.setRowCount(DaoFactory.getDocumentoDao().rowCount());
lazyModel.setPageSize(5);
}
公共LazyDataModel getLazyModel(){
返回lazyModel;
}
}
如果我没有遗漏什么,您可以使用操作:
<p:commandButton value="Buscar"
action="#{documentoBuscadorBean.lazyModel.load(0,10,...)}"
process="@form"
update="frmCli:panelResultadosDoc"/>
最好添加加载的无参数版本,这样就不会在视图中混用逻辑。如果出于某种原因不能使用EL 2.2,这甚至是强制性的(尽管我强烈建议使用EL 2.2,它为您节省了很多丑陋的f:param处理)。这是什么意思#{varDocBean.documento.id}?varDocBean
是一个DocumentoBean
-那么documento
是DocumentoBean的一个属性吗
还有,什么commandButton不做任何事情?我只看到一个commandButton,但是没有动作方法
你应该(再)看看在Primefaces lab showcase中的lazy dataTable
:您不能在jsf!@spauny中添加这样的参数值。请阅读示例并删除这种误导性的下推。如果OP使用jsf 1,创建无参数版本的load就足够容易了。这取决于EL实现。只有JBoss EL和JSP 2.2 EL能够这样做g这…也使用Seam使这成为可能…使用简单的JSF+Primefaces这是不可能的。投票不能被删除,除非你编辑你的帖子,并以其他方式添加参数。。。
<p:commandButton value="Buscar"
action="#{documentoBuscadorBean.lazyModel.load(0,10,...)}"
process="@form"
update="frmCli:panelResultadosDoc"/>