# paginator

![](https://62871326-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lc1Wg6hxnKABc7mqK0x%2F-Lc1Wiv-t8c_AYebZi8H%2F-Lc1Wt6U2Xg79j3gNQg6%2Fpagi.png?generation=1554820610417241\&alt=media)

* Controla la paginacion para un datatable
* Incorpora interamente el control para first, next, back,last
* Invoca al formulario new\.xhtml internamente
* Invoca internamente al metodo printAll()
* Se debe desabilitar la paginaciòn en el componente datatable
* Se debe indicar la cantidad de filas por pagina&#x20;
* Llevar el control de la pagina actual

## Atributos

| Nombre        | Tipo              | Descripciòn                       |
| ------------- | ----------------- | --------------------------------- |
| controller    | java.lang.Object  |                                   |
| entity        | java.lang.Object  |                                   |
| page          | pagina actual     |                                   |
| rowPage       | filas por paginas |                                   |
| renderedNew   | default="true"    | renderiza el boton New            |
| renderedClear | default="true"    | renderiza el boton Clear          |
| renderedPrint | default="true"    | renderiza el boton imprimir todos |

## Componente

```java
<jmoordbjsf:paginator
   controller="#{rolController}"
   entity="#{rolController.rol}"
   rowPage="#{rolController.rowPage}"
   page="#{rolController.page}"
   pages="#{rolController.pages}"
   skip="ajax:rolController.skip(rolController.page)"
```

## Controller

* Definir los atributos

```java
    Integer page = 1;
  Integer rowPage = 25;
```

* Cuando se crea el método set/get de page debe devolver el numero de documentos en la coleccion

```java
public List<Integer> getPages() {

        return rolRepository.listOfPage(rowPage);
}
```

* Los movimientos entre las paginas las controlamos mediante los métodos siguientes.

```java
// <editor-fold defaultstate="collapsed" desc="skip(Integer page)">

    @Override
    public String skip(Integer page) {
        try {
            this.page = page;
            move();
        } catch (Exception e) {
            errorServices.errorMessage(nameOfClass(),nameOfMethod(), e.getLocalizedMessage());
        }
        return "";
    }// </editor-fold>
```

## sizeOfPage

```java
@Override
    public Integer sizeOfPage() {
     return rolRepository.sizeOfPage(rowPage);
    }/
```

## move(Integer page)

* Se usa para contolar los desplazamientos se invoca directamente desde la interface IController

```java
 @Override
    public void move(Integer page) {
        try {
            this.page =page;
            System.out.println("llamo al move");
              JsfUtil.warningDialog("rolController.move", "page: "+page.toString());
            Document doc;
            switch (loginController.get("searchrol")) {
                case "_init":
                case "_autocomplete":
                    rolList = rolRepository.findPagination(page, rowPage);

                    break;

                case "idrol":
                    if (lookupServices.getIdrol() != null) {
                        doc = new Document("idrol", lookupServices.getIdrol());
                        rolList = rolRepository.findPagination(doc, page, rowPage, new Document("idrol", -1));
                    } else {
                        rolList = rolRepository.findPagination(page, rowPage);
                    }

                    break;

                default:

                    rolList = rolRepository.findPagination(page, rowPage);
                    break;
            }

            rolFiltered = rolList;

            rolDataModel = new RolDataModel(rolList);

        } catch (Exception e) {
            errorServices.errorMessage(nameOfClass(), nameOfMethod(), e.getLocalizedMessage());
        }
    }
```

## Ejemplo:

![](https://62871326-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lc1Wg6hxnKABc7mqK0x%2F-Lc1Wiv-t8c_AYebZi8H%2F-Lc1Wt6WHIbGPTczZZEM%2Frole1.png?generation=1554820610322621\&alt=media)

```java
   <jmoordbjsf:paginator
                    controller="#{rolController}"     
                    entity="#{rolController.rol}"     
                    rowPage="#{rolController.rowPage}"                   
                    page="#{rolController.page}"
                    pages="#{rolController.pages}"
                    skip="ajax:rolController.skip(rolController.page)" 

                    />
                <b:dataTable value="#{rolController.rolDataModel}"
                             var="item"
                             id="dataTable2"
                             paginated="false"
                             onpage="console.log('page');">

                    <b:dataTableColumn value="#{item.idrol}" label="#{msg['field.idrol']}"/>
                    <b:dataTableColumn value="#{item.rol}" label="#{msg['field.rol']}" />
                    <b:dataTableColumn value="#{item.activo}" label="#{msg['field.activo']}" />

                    <b:dataTableColumn label="">

                        <jmoordbjsf:column

                            edit="#{rolController.prepare('view',item)}"
                            delete="#{rolController.delete(item,false)}"
                            rendered="#{applicationMenu.rol.delete}"
                            />
                    </b:dataTableColumn>

                </b:dataTable>
```
