【问题标题】:Lazy Loading + Command Button on Primefaces [duplicate]Primefaces上的延迟加载+命令按钮[重复]
【发布时间】:2013-10-28 16:06:43
【问题描述】:

我是 JSF 的新手,我正在使用 primefaces-2.2.RC2。 我有一个commandButton,当我单击时,我希望它填充一个使用lazyLoading 的dataTable(我的工作基于primefaces 展示)。 当我点击commandButton时,数据没有加载。

这是我的一段代码:

<p:commandButton value="Search"
              action="#{tableBean.search()}"
              update="carList"
                                     />
<p:dataTable id="carList" 
             var="car" 
             value="#{tableBean.lazyDataModel}" 
             paginator="true" 
             rows="10"
             dynamic="true" 
             lazy="true" 
             paginatorPosition="bottom"
             >

安德在我的豆子上:

@ViewScoped
public class TableBean {
    LazyDataModel<Car> lazyDataModel;
    public TableBean() {
        lazyDataModel = new LazyDataModel<Car>() {
            @Override
            public List<Car> load(int i, int i1, String string, boolean bln, Map<String, String> map) {
                return new ArrayList<Car>();
            }
        };
    }

    public LazyDataModel<Car> getLazyDataModel() {
         return lazyDataModel;
    }

    public void search() {
        lazyDataModel = new LazyDataModel<Car>() {
            @Override
            public List<Car> load(int first, int pageSize, String sortField,boolean sortOrder, Map<String, String> filters) {
                return fetchLazyData(first, pageSize);
            }

            @Override
            public void setRowIndex(int rowIndex) {                
                setPageSize(10);
                if (rowIndex == -1 || getPageSize() == 0) {
                   super.setRowIndex(-1);
                } else {
                   super.setRowIndex(rowIndex % getPageSize());
                }
            }

            public List<Car> fetchLazyData(int first, int pageSize) {
                 System.out.println("Loading the lazy car data between " + first + " and " + (first + pageSize));
            List<Car> lazyCars = new ArrayList<Car>();

                 for (int i = 0; i < pageSize; i++) {
                     int offset = i + first;
                     lazyCars.add(new Car("Model_" + offset, (int) (Math.random() * 60 + 1960), "Brand_" + offset, "Color_" + offset));
                 }
                 return lazyCars;
            }
       };
       lazyDataModel.setRowCount(10000);
    }
}

更新:我发现我必须绑定我的 DataTable 并且在我的 bean 上我必须调用 loadLazyData() 函数。

【问题讨论】:

  • 您为什么使用旧的测试版? PrimeFaces 2.2 已在 2 年多前完成。
  • 这是我将要工作的项目的非功能性需求。显然他们使用的是使用此版本 primefaces 的定制 Tomcat。
  • 你在使用@ManagedBean注解吗?还是写在你的 faces-config 文件中(jsf1.2 old style/school)?
  • 我正在使用@ManagedBen 注释。
  • 不要质疑答案。只需将答案发布为真实答案即可。不要在问题标题中大喊“已解决”。只需将答案标记为已接受,问题就会在列表和搜索中以不同的方式显示。

标签: jsf jsf-2 primefaces datatable lazy-loading


【解决方案1】:

我发现我必须将我的 DataTable 与我的 bean 绑定,并且在我的 bean 上我必须调用 loadLazyData() 函数来通知表以加载它。

【讨论】:

猜你喜欢
  • 2012-08-08
  • 1970-01-01
  • 2012-08-07
  • 1970-01-01
  • 1970-01-01
  • 2015-09-18
  • 2014-01-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多