sortowanie rekordow z tabeli - Spring + Hibernate

0

witam,

w widoku wypisuje liste rekordow w tabeli:

 
<table class="data">
    <tr>
        <th>Name</th>
        <th>Email</th>
        <th>Telephone</th>
        <th>PESEL</th>
        <th>Action</th>
    </tr>
    <c:forEach items="${employeeList}" var="emp">
        <tr>
            <td>${emp.lastname}, ${emp.firstname} </td>
            <td>${emp.email}</td>
            <td>${emp.telephone}</td>
            <td>${emp.pesel}</td>
            <td><a href="delete/${emp.id}">delete</a></td>
        </tr>
    </c:forEach>
    </table>

i teraz jak zrobic zeby dane byly posortowane po danych ktorejs z kolumn, przykladowo po nazwiskach alfabetycznie? gdzie to sie robi i jak? pomoze ktos jak to zrobic? chodzi mi zebym mial np. buttona i po jego kliknieciu dane sortuja sie alfabetycznie a strona sie odswieza, nie wiem wlasnie gdzie umiescic i jak zrobic to sortowanie...

0

Robi się to w kodzie dao. Jeżeli używasz criteria to zamiast loadAll() piszesz odpowiednie criteria z sortowaniem. Możesz oczywiście posortować z poziomu javy, ale nie uważam tego za najlepsze rozwiązanie. Potem z dao przekazujesz czy to do jakiegoś servisu, czy to już do kontrolera i serwujesz na widok. Metoda w kontrolerze odpowiedzialna za ten RequestMapping może przyjmować opcjonalny parametr odnośnie sortowania i odpowiednio się do niego stosować przy wyrzucaniu listy.

0

w DAO wywoluje liste,

 
@Override
    public List<EmployeeEntity> getAllEmployees() {
        return this.sessionFactory.getCurrentSession().createQuery("from EmployeeEntity").list();
    }

jak mialyby tu wygladac te criteria? nowa metode musze pisac do tego?

0

W swoim kodzie używasz hqla. Jeżeli za jego pomocą chcesz wyciągnąć posortowaną liste po jakiejś kolumnie to byłoby coś w stylu createQuery("from EmployeeEntity order by email").
Za pomocą criteria:

 
criteria = sessionFactory.getCurrentSession().createCriteria(EmployeeEntity.class)
                                                                  .addOrder(desc("email"));
return criteria.list();

Reszta to już zwykła java, czyli dostosowanie Order na podstawie kolumny itp.

0

dzieki, poczytam co i jak i jak cos to bede pisal

0

W Spring Data miałbyś coś takiego:

//Results are sorted in ascending order
public List<Person> findByLastNameOrderByLastNameAsc(String lastName);
 
//Results are sorted in descending order
public List<Person> findByLastNameOrderByLastNameDesc(String lastName)
0

Jeżeli ma to być prosta tabela bez stronicowania to rozejrzyj się za tabelą która pozwala sortować w javascripcie. Np. jqGrid.
Ma to 2 zalety:

  • Sortowanie po stronie klienta - nie obciąża serwera.
  • Możliwa zmiana sortowania na inne np. z sortowania po nazwisku na sortowanie po imieniu bez przeładowania strony.

Jeżeli dojdzie stronicowanie to trzeba dodać sortowanie po stronie serwera, ale mimo wszystko pobieranie jest wtedy przez rest tylko danych do tabeli więc zysk w szybkości też jest.

0

jqGrid niestety już jest komercyjny

1 użytkowników online, w tym zalogowanych: 0, gości: 1