没有调用PrimeFaces lazydatamodel加载方法

时间:2012-11-06 02:23:27

标签: jsf-2 primefaces

我碰巧不明白为什么在我的primefaces表的lazydatamodel中没有调用我的load方法。我的xhtml页面就是这样的

<h:form id="myForm">
    <p:dataTable value="#{myBean.configDataModel}"
                            id="configTable" var="config" paginator="true" rows="10"
                            selectionMode="single"
                            paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
                            rowsPerPageTemplate="5,10,20">
    .
    .
</h:form>

我的Bean代码是这样的,并提出了system.out.println语句,但我注意到它没有被调用。

public class MyBean{
    // private List<MyBean> configList;
    private LazyDataModel<MyBean> configDataModel;

    @SuppressWarnings("serial")
    public LazyDataModel<MyBean> getConfigDataModel() {
        if (configDataModel == null) {
            configDataModel = new LazyDataModel<MyBean>() {

                @Override
                public List<MyBean> load(int arg0, int arg1, String arg2,
                        SortOrder arg3, Map<String, String> arg4) {
                    System.out.println("Here!!!!!");
                    return null;
                }
            };

        }
        return configDataModel;
    }
    public void setConfigDataModel(LazyDataModel<MyBean> configDataModel) {
        this.configDataModel = configDataModel;
    }
}

可能是什么原因?

2 个答案:

答案 0 :(得分:22)

自PrimeFaces 3.3起,您需要将重复组件的lazy属性明确设置为true才能启用对LazyDataModel的支持。

<p:dataTable ... lazy="true">

另见:

答案 1 :(得分:0)

  1. 如果您是IE,请务必检查所谓的&#34;兼容模式&#34;它是怪癖。我在懒惰的数据表中遇到了非常烦人的问题,在我将文本输入到过滤器字段后无法调用其加载方法。在浪费了很多时间后,我终于意识到浏览器在默认模式下运行7.数据库延迟加载适用于模式8,9,10
  2. 如果您的惰性数据表位于对话框中,请确保将对话框放在表单中,否则,在过滤器字段中键入值将不会提交给加载方法。