Yui and server side pagination

I am using YUI 2.7.0 and I have client side pagination and now I am trying to get server side pagination (request can return thousands of results). Right now, no results are displayed (I get a "No records found" message). Can't seem to find an answer online. The alert () call is showing the correct numbers, so I know that something is being returned from the server. I suspect the problem is jobCallback or handleDataReturnPayload, but I'm stuck from there. Any hints?

  function jobStatusFormatter(elCell, oRecord, oColumn, oData)
  {
    var messages = 
    [
    <c:forEach var="x" begin="0" end="17">
      "<fmt:message key="job.status.${x}"/>",
    </c:forEach>
    ];

    elCell.innerHTML = messages[oData]; 
  }

  var jobColumns = 
  [
    {key:"lotNumber",               label:"<fmt:message key="job.lotNumber"/>",      sortable:true},
    {key:"scheduledStartDate",      label:"<fmt:message key="job.startDate"/>",      sortable:true, formatter:"date"},
    {key:"scheduledCompletionDate", label:"<fmt:message key="job.completionDate"/>", sortable:true, formatter:"date"},
    {key:"itemNumber",              label:"<fmt:message key="job.itemNumber"/>",     sortable:true},
    {key:"statusType",              label:"<fmt:message key="job.statusType"/>",     sortable:true, formatter:jobStatusFormatter},
    {key:"plannerCode",             label:"<fmt:message key="job.plannerCode"/>",    sortable:true},
    {key:"scheduledGroup",          label:"<fmt:message key="job.scheduledGroup"/>", sortable:true},
    {key:"organization",            label:"<fmt:message key="job.organization"/>",   sortable:true}
  ];

  var jobsDataSource = new YAHOO.util.DataSource("<%=request.getContextPath()%>/secure/xml/jobs.do?");
  jobsDataSource.connMethodPost = true;
  jobsDataSource.responseType = YAHOO.util.DataSource.TYPE_XML;
  jobsDataSource.responseSchema = 
  {
    resultNode: "job",
    fields: 
    [
      "id",
      "lotNumber",
      "plannerCode",
      "scheduledGroup",
      "scheduledStartDate",
      "scheduledCompletionDate", 
      "itemNumber",
      "statusType",
      "organization"
    ],
    metaNode: "jobs",
    metaFields:
    {
      totalResultsAvailable : "totalResultsAvailable", 
      totalResultsReturned : "totalResultsReturned" 
    }
  };

  var jobsConfigs = 
  {
    initialLoad: false,
    dynamicData: true,
    paginator: new YAHOO.widget.Paginator(
    { 
      rowsPerPage:15, 
      rowsPerPageOptions : [15,25,50,100]
    })
  };

  var jobsTable = new YAHOO.widget.DataTable("jobsDiv", jobColumns, jobsDataSource, jobsConfigs); 
  jobsTable.subscribe("rowMouseoverEvent", jobsTable.onEventHighlightRow); 
  jobsTable.subscribe("rowMouseoutEvent",  jobsTable.onEventUnhighlightRow); 
  jobsTable.set("selectionMode","single"); 
  jobsTable.subscribe("rowClickEvent", function(args)
  {
    var target = args.target;
    var record = this.getRecord(target);

    window.location="job.do?id="+record.getData("id");
  });            
  jobsTable.handleDataReturnPayload = function(oRequest, oResponse, oPayload) 
  {
    alert("totalResultsAvailable="+oResponse.meta.totalResultsAvailable+", totalResultsReturned="+oResponse.meta.totalResultsReturned);
    oPayload.totalRecords = oResponse.meta.totalResultsAvailable;
    return oPayload;
  };

  var jobsCallback = 
  {
    success : jobsTable.onDataReturnInitializeTable ,
    failure : jobsTable.onDataReturnInitializeTable ,
    scope : jobsTable
  };

  function getQueryParams()
  {
    var form = document.forms[0];
    var lotNumber = form.lotNumber.value;
    var itemNumber = form.itemNumber.value;
    var plannerCode = form.plannerCode.value;
    var scheduledGroup = form.scheduledGroup.value;
    var statusType = form.statusType.value;
    var organization = form.organization.value;

    return "lotNumber="+lotNumber+
           "&itemNumber="+itemNumber+
           "&statusType="+statusType+
           "&plannerCode="+plannerCode+
           "&scheduledGroup="+scheduledGroup+
           "&organization="+organization;
  }

  /* Called when submit button pressed */
  function findJobs()
  {
    // Sends a request to the DataSource for more data
    jobsTable.showTableMessage(YAHOO.widget.DataTable.MSG_LOADING);
    jobsDataSource.sendRequest(getQueryParams(), jobsCallback);
  }

      

0


a source to share


1 answer


You probably get the error right after the warning, but it gets swallowed. FireBug Break on All Errors config can confirm this. OPayload odds are undefined. It is set by the value of the argument property in the callback object.

So you can get around this with

jobsCallback = {
    success : jobsTable.onDataReturnInitializeTable,
    failure : jobsTable.onDataReturnInitializeTable,
    scope : jobsTable,
    argument : {}
};

      



or

jobsTable.handleDataReturnPayload = function(oRequest, oResponse, oPayload) {
    oPayload = oPayload || {};
    oPayload.totalRecords = oResponse.meta.totalResultsAvailable;
    return oPayload;
};

      

NTN

+3


a source







All Articles