2015-05-05 4 views
1

У меня есть форма, в которой пользователь может фильтровать незавершенные транзакции. Я хочу использовать функцию разбиения на страницы весны. Это работает (как я и хотел), только если я не хочу фильтровать (то же, что и запрос getAll()). Моя проблема заключается в том, что я отправляю форму контроллеру, он ищет отфильтрованные транзакции, дает информацию о количестве страниц, об общем количестве ect .. Но если я нажму на кнопку разбиения на страницы, то идет метод, подпись которого GET (URL-адрес, например, localhost .../pending? Page = 2 & size = 20), и моя форма инициализируется значениями по умолчанию. Поэтому фильтр не работает, просто разбивка на страницы.Pagination and filter in Spring MVC

@RequestMapping(value = "/pending", method = RequestMethod.GET, produces = "text/html") 
public String getPendingTransactions(@ModelAttribute("pendingForm") PendingTransactionForm pendingForm, Model uiModel, HttpServletRequest httpServletRequest, Pageable pageable) { 
    PageWrapper<Transaction> transactionItems = new PageWrapper<Transaction>(transactionService.searchPendingItemsByParams(pendingForm, pageable)); 
    uiModel.addAttribute("pendingForm", pendingForm); 
    uiModel.addAttribute("transactionItems", transactionItems); 
    uiModel.addAttribute("shoplist", transactionService.getShopListForNotFinishedItems()); 
    return "transaction/pendingtransactions"; 
} 

@RequestMapping(value = "/pending", method = RequestMethod.POST) 
public String processPendingTransactions(@ModelAttribute("pendingForm") PendingTransactionForm pendingForm, Model uiModel, HttpServletRequest httpServletRequest, Pageable pageable) { 
    PageWrapper<Transaction> transactionItems = new PageWrapper<Transaction>(transactionService.searchPendingItemsByParams(pendingForm, pageable)); 
    uiModel.addAttribute("pendingForm", pendingForm); 
    uiModel.addAttribute("transactionItems", transactionItems); 
    uiModel.addAttribute("shoplist", transactionService.getShopListForNotFinishedItems()); 
    return "transaction/pendingtransactions"; 
} 

Есть ли какое-либо решение, как реализовать фильтр и разбиение на страницы вместе?

ОБНОВЛЕНИЕ: благодаря ответу Хосе Луиса Мартина, он работает!

@RequestMapping("/transactions") 
@Controller 
@SessionAttributes("pendingForm") 
public class TransactionsController { 

    @ModelAttribute("pendingForm") 
    public PendingTransactionForm initializePendingForm() { 
     return new PendingTransactionForm(); 
    } 

    @RequestMapping(value = "/pending", method = {RequestMethod.POST, RequestMethod.GET}, produces = "text/html") 
    public String getPendingTransactions(@ModelAttribute("pendingForm") PendingTransactionForm pendingForm, Model uiModel, Pageable pageable) { 
     PageWrapper<Transaction> transactionItems = new PageWrapper<Transaction>(transactionService.searchPendingItemsByParams(pendingForm, pageable)); 
     uiModel.addAttribute("transactionItems", transactionItems); 
     uiModel.addAttribute("shoplist", transactionService.getShopListForNotFinishedItems()); 
     return "transaction/pendingtransactions"; 
    } 
} 

ответ

0

Храните фильтр в сеансе, используя @SessionAttributes, поэтому он будет доступен для запросов на страницы.

Некоторое время назад я написал пример для displaytag и JDAL, но контроллер - контроллер Spring, поэтому он может быть вам полезен.

http://www.jdal.org/doc/displaytag.php