Tengo una enumeración:

public static enum States {

    SEL("Selangor"),
    WP("Wilayah Persekutuan"),      
    KEL("Kelantan"),
    LAB("Labuan"),
    PER("Perlis");  

    private String value;

    States(String val) {
        this.value = val ;
    }

    public String getValue() {
        return value;
    }       
}

Los valores se muestran en una plantilla Thymeleaf por:

<div class="col-xs-6 padding-sides-none">
  <div class="form-group col-xs-12 padding-sides-none">
    <label class="col-xs-2 padding-sides-none" style="margin-left:15px">State</label>
    <div class="col-xs-7 padding-sides-none">
      <select class="form-control selectpicker" data-live-search="true"
              style="width:300px;margin-left: 50px;">
        <option value="" selected disabled hidden>Please select a state</option>
        <option th:each="state : ${T(com.workspez.model.Accountant.States).values()}"
                th:value="${state}" th:text="${state.getValue()}">
        </option>
      </select>
    </div>
  </div>
</div>

Me gustaría mostrar los valores en orden alfabético. ¿Es posible? Una forma es organizar manualmente la enumeración, pero ¿hay alguna forma de ordenar la lista de enumeraciones? Gracias.

2
user4752891 17 feb. 2018 a las 15:16

2 respuestas

La mejor respuesta

Puede usar comparator dentro de States enum para comparar y ordenar valores de enumeración como este:

public enum States {
    SEL("Selangor"),
    WP("Wilayah Persekutuan"),      
    KEL("Kelantan"),
    LAB("Labuan"),
    PER("Perlis");  

    private String value;       
    States(String val){
        this.value = val ;
    }       
    public String getValue(){
        return value;
    }

    public static States[] getSortedValue(){
        States[] values = States.values();
        Arrays.sort(values,(s1,s2)->s1.getValue().compareTo(s2.getValue()));
        return values;
    }
}

En su HTML thymeleaf simplemente llame al método getSortedValue para obtener valores en orden ascendente como este:

<option th:each="state : ${T(com.crud.example.enums.States).getSortedValue()}"
th:value="${state}" 
th:text="${state.getValue()}">
</option>
2
Ajit Soman 17 feb. 2018 a las 16:08

¿Cómo se obtendría el valor seleccionado en el cuadro combinado? Yo hice :

<select th:field="*{currentAccountant.state}" class="form-control selectpicker"  data-live-search="true" style="width:300px;margin-left: 50px;"  >
                                      <option value="" selected disabled hidden>Please select a state</option>
                                     <option th:each="state : ${T(com.model.Accountant.States).getSortedValue()}"
                                        th:value="${state}" 
                                        th:text="${state.getValue()}">
                                    </option>
                                </select>

Los valores ya no se completan. Eliminé th:field="*{currentAccountant.state}" y luego se completó

0
user4752891user4752891 18 feb. 2018 a las 17:16