Esiste un componente di impaginazione standard, tag-lib o codice campione disponibile per l'impaginazione in Spring MVC?Come implementare l'impaginazione in primavera MVC 3
risposta
Dai un'occhiata a PagedListHolder
e altre classi da org.springframework.beans.support
.
Vedere il JPetstore nei campioni per alcuni esempi, ad es. in SearchProductsController.java
:
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
String keyword = request.getParameter("keyword");
if (keyword != null) {
if (!StringUtils.hasLength(keyword)) {
return new ModelAndView("Error", "message", "Please enter a keyword to search for, then press the search button.");
}
PagedListHolder productList = new PagedListHolder(this.petStore.searchProductList(keyword.toLowerCase()));
productList.setPageSize(4);
request.getSession().setAttribute("SearchProductsController_productList", productList);
return new ModelAndView("SearchProducts", "productList", productList);
}
else {
String page = request.getParameter("page");
PagedListHolder productList = (PagedListHolder) request.getSession().getAttribute("SearchProductsController_productList");
if (productList == null) {
return new ModelAndView("Error", "message", "Your session has timed out. Please start over again.");
}
if ("next".equals(page)) {
productList.nextPage();
}
else if ("previous".equals(page)) {
productList.previousPage();
}
return new ModelAndView("SearchProducts", "productList", productList);
}
}
Stavo cercando un modo per farlo, ma non ho trovato nessun componente standard o taglib. Penso principalmente perché il paging può diventare molto specifico poiché è necessario recuperare i dati con il paging dal database (se si utilizza Hibernate è possibile farlo facilmente utilizzando l'API Criteria). Sono venuto con qualcosa di simile:
public class Pager
{
private int page;
private int results;
private String sortOrder;
private String sortColumn;
// Getters and setters
}
@Controller
public class StuffController
{
@Autowired SomeEntityService someEntityService;
@RequestMapping("/test.html", method = Method.GET)
public void getStuffPaged(@RequestParam("id") String id, Pager pager, ModelMap mm)
{
mm.addAttribute("entities", someEntityService.get(id, pager));
}
}
Se ora si esegue una richiesta di http://domain/app/test.html?id=10&page=1&results=30&sortOrder=asc
si otterrà l'oggetto pager nella richiesta.
Nessuno mi viene in mente e Google inoltre non rivela alcun componente specifico per quello (anche se fornisce molti esempi concreti e suggerimenti). Ma in teoria solo un gruppo di pulsanti e uno (o due) parametri di richiesta sono più che sufficienti. Quindi lasciare che SQL/DB faccia il suo lavoro. Ho postato una risposta a una domanda simile nel contesto JSP/Servlet/DAO prima dello here.
Si riduce sostanzialmente giù per passare firstrow
(indice della prima riga da visualizzare in una pagina) intorno come parametro della richiesta e presentante due pulsanti/link nella forma impaginazione che a/decrementa il firstrow
con rowcount
(quantità di righe visualizzate in una sola volta in una pagina) in combinazione con una query SQL che restituisce un sottoinsieme dei risultati con l'aiuto di sotto ciascuna LIMIT
, OFFSET
clausole o sottoselezioni o funzioni specifiche, a seconda del DB in questione. Vedere la risposta aforelinked per esempi di codice dettagliati e query SQL.
Avete mai sentito parlare del progetto Spring Data JPA? C'è una bella soluzione flessibile usando l'interfaccia Pagable. Ho trovato che fosse il modo più semplice per ottenere una paginazione pulita e senza piatti. Scopri di più al Spring Data JPA homepage.
Ho esaminato il link e non ho trovato niente che mi saltasse addosso a questo scopo – mmcrae
Here's a link to the Spring Data JPA reference docs, dove hanno un approccio molto pulito alla paginazione del web.
Impressionante, grazie. C'è supporto per la ricerca sulle colonne? – mmcrae
Sì. Supporto Repos findByXxx(), findByXxx (Pageable) ecc. Dove xxx è la colonna. –
Ho pubblicato una libreria java open source incentrata sull'impaginazione con la struttura di primavera qualche tempo fa.
Anche se non ha avuto molto successo forse qualcuno potrebbe essere interessato a provarlo.
ci sono esempi per utilizzarlo con
Gli esempi on-line sono un po 'obsolete, meglio scaricare il file jdal-campioni da sourceforge.
- 1. Come implementare funzionalità Logout usando Primavera Web MVC
- 2. Modulo di invio in primavera MVC 3 - spiegazione
- 3. Caricamento file in primavera 3 MVC - Eccezione puntatore nullo
- 4. Implementare TransferResult in MVC 3 RC - non funziona
- 5. Come configurare primavera RestTemplate con SSL (in primavera @MVC)
- 6. come ottenere getServletContext() in primavera controller mvc
- 7. Come reindirizzare a POST in primavera MVC
- 8. Carica immagine in primavera mvc
- 9. modalità dev in primavera MVC
- 10. Richiesto RequestMapping in primavera MVC
- 11. Come implementare enumerazioni in scala slick 3?
- 12. Campo nascosto in primavera MVC
- 13. Come implementare l'autenticazione personalizzata in Spring Security 3?
- 14. Come implementare il pattern MVC in Tkinter
- 15. In primavera mvc 3, come scrivere un cookie mentre si restituisce un ModelAndView?
- 16. Come fare un'annotazione @CrossOrigin nella primavera 3?
- 17. Come terminare la sessione nella primavera 3
- 18. Come implementare solo il metodo specifico di CrudRepository in primavera?
- 19. Come implementare un @using attraverso tutte le viste in Asp.Net MVC 3?
- 20. Dove implementare Funzionalità comune In Asp.net MVC
- 21. Oggetti predefiniti in primavera 3 mvc SessionAttributes in caso di sessione scaduta
- 22. Come utilizzare Console.WriteLine in ASP.Net MVC 3
- 23. Come ereditare RequestMappings in un'API REST MVC Spring 3
- 24. Primavera 3.0 MVC MVC: tag view-controller
- 25. Ricerca locale dal controller in primavera MVC
- 26. Risolutori a vista multipla in primavera mvc
- 27. casella combinata in primavera web MVC
- 28. Corrente di accesso Modello in primavera-mvc
- 29. Come forzare disabilitare il supporto JSR-303 nella primavera 3?
- 30. Durata del controller in primavera MVC
(+1) Hot damn, non avevo idea che fosse lì. Devo aver implementato quella funzionalità almeno 3 volte, ed era già ... – skaffman
cool, A proposito, puoi spiegare, come è necessaria la sessione nell'esempio del codice SearchProductsController? Ho passato il codice non riuscendo ad usarlo. – Nachiket
@Nachiket Una volta creato, l'oggetto 'PagedListHolder' viene inserito nella Session, l'impaginazione viene effettivamente eseguita su un oggetto in memoria. Questo risponde alla tua domanda? In caso contrario, puoi chiarire? –