7
votes

I happen not to understand why my load method is not called in a lazydatamodel of my primefaces table. My xhtml page goes like this

<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>

My Bean code goes like this and put up system.out.println statements but I notice it isn't called.

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;
    }
}

What could be the cause?

2

2 Answers

25
votes

Since PrimeFaces 3.3, you'd need to explicitly set the lazy attribute of the repeating component to true in order to enable the support for LazyDataModel.

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

See also:

0
votes
  1. If you are IE, be sure to check which so-called "compatibility mode" it is quirking in. I have had very annoying problems with lazy datatable failing to call its load method after I typed text into the filter field. After much wasted time, I eventually realized that the browser was running in default mode 7. Datatable lazy load works for modes 8, 9, 10
  2. If your lazy datatable is in a dialog, then be sure to place the dialog within the form, otherwise, typing values into a filter field will not submit to the load method.