java pagination grid paging tapestry

java - Adornamiento de rejilla de tapiz con entrada y/o enlaces para establecer el número personalizado de filas por página



pagination grid (1)

soy yo otravez :)

Estoy intentando extender el siguiente comportamiento de Tapestry Grid de la siguiente manera.

Por el momento, puedo seleccionar cuántas filas por página quiero mostrar de esta manera:

<t:grid class="t-form-loop" t:source="myGridDataSource" t:model="myBeanModel" t:row="myEntry" t:encoder="myEncoder" t:rowsPerPage="20" t:pagerPosition="both" t:rowIndex="currentIndex" t:inplace="true">

Me gustaría que la parte con rowsPerPage sea ​​dinámicamente modificable, lo que significa que el usuario podría hacer clic en una de las cantidades predefinidas (10,20,50,100) o simplemente ingresar su propia cantidad deseada de filas mostradas por página.

Una manera sucia (y no inteligente de hacer esto) es proporcionar los enlaces / imput para eso y guardarlo en una variable en mi página, por lo que la Grilla podría hacer referencia a esto de esta manera:

t:rowsPerPage="myRowsPerPage"

Sin embargo, supongamos que tengo, por ejemplo, 20-30 páginas. Agregar el mismo código en todos y cada uno de ellos sería inútil y estúpido, así que supongo que querría decorar la grilla existente de alguna manera. Sin embargo, no me gustaría hacer esto globalmente, ya que en algunas páginas me gustaría ofrecer esta funcionalidad y en otras no.

Entonces, dado mi conocimiento limitado de Tapestry, asumiría que tengo 2 opciones:

  1. Mixin que agregaría la siguiente funcionalidad a las Grid seleccionadas
  2. Extienda el componente Grilla de una manera que tenga los siguientes 2 parámetros:

    a. t:rowsPerPageValues="10,20,50,100"
    segundo. t:rowsPerPageInput="true"

Además, me gustaría saber cuántas filas se muestran actualmente.

¿Cuál es el mejor enfoque para este problema y podría obtener algunos consejos / ayuda para implementarlos?

Editar: me gustaría que se vea algo así (sry para HTML malo): http://jsfiddle.net/ZST4E/1/


Creo que deberías crear un nuevo componente que tenga una t:grid incorporada. Puede encontrar que publishParameters ayudará.

p.ej:

ExtendedGrid.java

public class ExtendedGrid { @Component(id="grid", publishParameters="source,inplace,etc,etc") private Grid grid; @Property private int rowsPerPage; }

extendedGrid.tml

<t:container xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd"> <t:form zone="gridZone"> <t:select t:id="rowsPerPage" model="[10,20,50,100]" /> <t:submit /> </t:form> <t:zone t:id="gridZone"> <t:grid t:id="grid" rowsPerPage="prop:rowsPerPage" /> </t:zone> </t:container>

page.tml

<t:extendedGrid source="mySource" inplace="true" />