2012-07-25 9 views
6

Solo quiero ejecutar mi método de paginación con Jersey en el lado del servidor y JQuery en el cliente.Cuál es la forma correcta de paginar (especialmente con JQuery y Jersey)

El servidor (suponiendo que el usuario acaba de solicitar/descanso/usuarios de la página = 1?):

// Hardcoded the page number here, but it would be page-1, page+1 
    String prevLink = uriInfo.getRequestUri() + "?page=0"; 
    String nextLink = uriInfo.getRequestUri() + "?page=2"; 
    String linkHeader = String.format(LINK_HEADER_TMPL, prevLink, nextLink); 
    return List<User> currentPageResults; 

Esto me da el siguiente encabezado en la respuesta:

Link: <http://localhost:8880/rest/users?page=0>; rel="prev", <http://localhost:8880/rest/users?page=2>; rel="next" 

en el cliente:

var xhr = $.getJSON("rest/users", function(allData) { 
     var links = (xhr.getResponseHeader("link")).split(','); 
     var relLinks = []; 
     $.each(links, function(index, value) { 
      var parts = value.split(';'); 
      var url = parts[0].replace(/^.*<(.*)>.*$/m, '$1'); 
      var rel = parts[1].replace(/^.*"(.*)".*$/m, '$1'); 
      relLinks[rel] = url; 
     }); 

     alert(relLinks['prev']); 

la alerta me da lo correcto, y es lo que me gustaría usar para generar mis enlaces de la página:

http://localhost:8880/rest/users?page=0 

lo que las preguntas:

  1. es mi encabezado de enlace de formato correcto? Al analizar el encabezado del enlace en , el lado del cliente parece un poco convulsionado.
  2. ¿Es esta una forma correcta/aceptada de hacer esto? Miré el filtro de respuesta Jersey , pero eso requiere agregar anotaciones específicas de Jersey en la clase de modelo, que no quería hacer.
  3. ¿Qué pasa con el total de páginas disponibles? ¿Hay una forma estandarizada de dando eso en la información? Si tuviera el total de la página, presumiblemente podría soltar los enlaces Rel, y solo generarlos del lado del cliente? ¿Sería correcto?

Por cierto, ¿cómo se produjo el formato completo de los encabezados de enlace? La forma "url; rel = name, url; rel = name" me parece un poco rara.

EDIT: Encontrado este http://tools.ietf.org/html/rfc5988#section-6.2, que especifica los nombres de relación 'estándar'

Respuesta

0

Suponiendo que usted quiere asegurarse de que estas páginas pueden ser recuperados por los motores de búsqueda, lo que lo recomendaría cambiar sus enlaces para eliminar la cadena de consulta.

http://localhost:8880/rest/users/0 

donde 0 se analiza con el lado del servidor al número de página deseado. En cuanto al total de páginas, sabrá en el servidor si ha llegado al final de su lista de usuarios. Si es así, simplemente omita su nextLink. Del mismo modo si currentPage == 0 entonces omite prevLink.

Puedes ver esto en acción aquí: http://www.autoquoter.com/aq/en/Blog/Archives

Cuestiones relacionadas