# Formularios con Ordenacion

A veces necesitamos ordenar en base a ciertos criterios. Generalmente lo implementamos en el list.xhtml.

Usamos un

```java
   <p:outputLabel value="#{msg['field.ordenadopor']}"/>
   <b:flyOutMenu width="50px">  
      <b:navCommandLink value="#{msg['field.porproveedor']}" update=":form:dataTable"  action="#{articuloController.orderBy('idproveedor')}" />
      <b:navCommandLink value="#{msg['field.porcodigo']}"   update=":form:dataTable"  action="#{articuloController.orderBy('idarticulo')}"/>
      <b:navCommandLink value="#{msg['field.porarticulo']}" update=":form:dataTable"  action="#{articuloController.orderBy('descripcion')}"  />

   </b:flyOutMenu>
```

## En el controller

* Agregamos un atributo order
* En el método **move()** obtener el atributo de ordenacion
* Crear un Document para ordenar
* Crear el mètodo orderBy()

```java
   private String order="idproveedor";

   public void move() {
        try {
            Document doc;
            switch (loginController.get("searcharticulo")) {
                case "_init":
                    Document sort= new Document();
                    switch(order){
                        case "descripcion":
                              sort =new Document("descripcion",1);
                            break;
                        case "idarticulo":
                              sort =new Document("idarticulo",1);
                            break;
                        case "idproveedor": 
                            sort =new Document("proveedor.idproveedor",1);
                            break;
                        default:
                             sort =new Document("idarticulo",1);
                    }

                    articuloList = articuloRepository.findPagination(page, rowPage, sort);

                    break;
                case "_autocomplete":
                    //no se realiza ninguna accion 
                    break;

                case "idarticulo":
                    doc = new Document("idarticulo", articulo.getIdarticulo());
                    articuloList = articuloRepository.findFilterPagination(doc, page, rowPage, new Document("idarticulo", -1));
                    break;

                default:

                    articuloList = articuloRepository.findPagination(page, rowPage);
                    break;
            }

            articuloFiltered = articuloList;

            articuloDataModel = new ArticuloDataModel(articuloList);

        } catch (Exception e) {
            JsfUtil.errorMessage("move() " + e.getLocalizedMessage());
        }
    }// </editor-fold>


      // <editor-fold defaultstate="collapsed" desc="orderBy(String order)">

    public String orderBy(String order) {
        try {
      this.order = order;
       loginController.put("searcharticulo", "_init");
      page = 1;
      move();

        } catch (Exception e) {
            JsfUtil.errorMessage("orderBy() " + e.getLocalizedMessage());
        }
        return "";
    }
```

![](https://2578941663-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lc1Wg6ze2c8GK7mFBZX%2F-Lc1WjGeqF4Ig-44ZLgX%2F-Lc1X7NAJWohI9xSfeHu%2Forden2.png?generation=1554820663992901\&alt=media)
