# 1.7 \<p:selectOneMenu> eventos en list.xhtml

Cuando usamos un \<p:selectOneMenu en el list.xhtml deseamos hacer un filtro y actualizar el datatable con el filtro creado, recuerde que en el list.xhtml necesitamos invocar el método move() con lo que es necesario guardar el search y el valor para luego realizar la operación.

![](/files/-Lnx5IfgJFNTtliXaLl8)

Definimos el selectOneMenu

```markup
  <b:panelGrid colSpans="2,4,2,4"  columns="4" size="xs"> 

   <p:outputLabel value="#{msg['field.secretarioadministrativo']}"/>
   <p:selectOneMenu id="secretarioadministrativo" value="#{secretarioAdministrativoController.vistoBuenoSecretarioAdministrativoSearch}" style="width:150px">
   <p:ajax listener="#{secretarioAdministrativoController.onVistoBuenoChangeSecretarioAdministrativo}" update=":form:dataTable" />
             <f:selectItem itemLabel="#{msg['selectitem.seleccione']}" itemValue="" noSelectionOption="true" />
             <f:selectItem itemLabel="#{msg['selectitem.pendiente']}" itemValue="pe" />
             <f:selectItem itemLabel="#{msg['selectitem.aprobado']}" itemValue="si" />
             <f:selectItem itemLabel="#{msg['selectitem.noaprobado']}" itemValue="no" />
    </p:selectOneMenu>

   <p:outputLabel value="#{msg['field.coordinador']}"/>
   <p:selectOneMenu id="coordinador" value="#{secretarioAdministrativoController.vistoBuenoSearch}" style="width:150px">
   <p:ajax listener="#{secretarioAdministrativoController.onVistoBuenoChange}" update=":form:dataTable" />
           <f:selectItem itemLabel="#{msg['selectitem.seleccione']}" itemValue="" noSelectionOption="true" />
           <f:selectItem itemLabel="#{msg['selectitem.pendiente']}" itemValue="pe" />
           <f:selectItem itemLabel="#{msg['selectitem.aprobado']}" itemValue="si" />
           <f:selectItem itemLabel="#{msg['selectitem.noaprobado']}" itemValue="no" />
    </p:selectOneMenu>
```

### En el Controller definir

Atributos para las búsquedas

```java
 private String vistoBuenoSecretarioAdministrativoSearch = "no";
 private String viajeSecretarioAdministrativoSearch = "no";
```

Definir los eventos e invocar el metodo setSearchAndValue(). Recuerde que este método esta definido en el framework.

```java
// <editor-fold defaultstate="collapsed" desc="String onVistoBuenoChange()">
    public String onVistoBuenoChange() {
        try {
             setSearchAndValue("vistobuenocoordinador", vistoBuenoSearch);
            move(page);
        } catch (Exception e) {
            errorServices.errorMessage(nameOfClass(), nameOfMethod(), e.getLocalizedMessage());
        }
        return "";
    }// </editor-fold>
    // <editor-fold defaultstate="collapsed" desc="String onVistoBuenoChangeSecretarioAdministrativo()">

    public String onVistoBuenoChangeSecretarioAdministrativo() {
        try {
            setSearchAndValue("vistobuenosecretarioadministrativo", vistoBuenoSecretarioAdministrativoSearch);
           
            move(page);
        } catch (Exception e) {
            errorServices.errorMessage(nameOfClass(), nameOfMethod(), e.getLocalizedMessage());
        }
        return "";
    }// </editor-fold>
```

En el metodo move() implementamos la búsqueda recuperando los valores del search y el searchValue

```java
// <editor-fold defaultstate="collapsed" desc="move(Integer page)">
    @Override
    public void move(Integer page) {
        try {

            this.page = page;
            solicitudDataModel = new SolicitudDataModel(solicitudList);

            Usuario jmoordb_user = (Usuario) JmoordbContext.get("jmoordb_user");

            String descripcion = jmoordb_user.getUnidad().getIdunidad();
            Document doc = new Document("activo", "si");

            switch (getSearch()) {
                case "_init":
                case "_autocomplete":

                    solicitudList = solicitudRepository.findPagination(doc, page, rowPage, new Document("idsolicitud", -1));

                    break;

                case "idsolicitud":
                    if (getValueSearch() != null) {
                        solicitudList = solicitudRepository.findPagination(doc, page, rowPage, new Document("idsolicitud", -1));
                    } else {
                        solicitudList = solicitudRepository.findPagination(doc, page, rowPage);
                    }

                    break;

                case "estatus":
                    Estatus estatus = new Estatus();
                    estatus = (Estatus) getValueSearch() ;
                    doc.append("estatus.idestatus", estatus.getIdestatus());
                    solicitudList = solicitudRepository.findPagination(doc, page, rowPage, new Document("idsolicitud", -1));

                    break;

                case "_betweendates":

                    solicitudList = solicitudRepository.filterBetweenDatePaginationWithoutHours("activo", "si",
                            "fechahorapartida", fechaDesde,
                            "fechahoraregreso", fechaHasta,
                            page, rowPage, new Document("idsolicitud", -1));
                    break;
                case "vistobuenocoordinador":

                    String vistoBueno = (String) getValueSearch() ;
                    doc = new Document("activo", "si");
                    doc.append("vistoBueno.aprobado", vistoBueno);
                    solicitudList = solicitudRepository.findPagination(doc, page, rowPage, new Document("idsolicitud", -1));

                    break;
                case "vistobuenosecretarioadministrativo":

                    String vistoBuenoSecretarioAdministrativo = (String) getValueSearch() ;
                    doc = new Document("activo", "si");
                    doc.append("vistoBuenoSecretarioAdministrativo.aprobado", vistoBuenoSecretarioAdministrativo);
                    solicitudList = solicitudRepository.findPagination(doc, page, rowPage, new Document("idsolicitud", -1));

                    break;
                case "porsolicitado":

                    Usuario solicita = (Usuario)getValueSearch() ;
                    doc = new Document("activo", "si");
                    doc.append("usuario.0.username", solicita.getUsername());
                    solicitudList = solicitudRepository.findPagination(doc, page, rowPage, new Document("idsolicitud", -1));

                    break;
                case "porresponsable":

                    Usuario responsable = (Usuario) getValueSearch() ;
                    doc = new Document("activo", "si");
                    doc.append("usuario.1.username", responsable.getUsername());
                    solicitudList = solicitudRepository.findPagination(doc, page, rowPage, new Document("idsolicitud", -1));

                    break;
                default:

                    solicitudList = solicitudRepository.findPagination(doc, page, rowPage, new Document("idsolicitud", -1));

                    break;
            }

            solicitudDataModel = new SolicitudDataModel(solicitudList);

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

        }

    }// </editor-fold>

```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://avbravo-2.gitbook.io/trucosjakartaee/jmoordbjsf/controller/1.5-less-than-p-selectonemenu-greater-than-eventos-en-list.xhtml.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
