2017-11-28 20 views
0

次のコントローラでは、オプションの「ページ」パラメータを使用できます。URLプリメータをパスベースのパラメータに置き換えます

今の私のURLがmysite.com/pittsburgh-listings?page=2

私はURLが代わりに次のようになりたいようになり、どのように私はこれを達成することができますか?同じ制御方法では2つのエンドポイント(と、ページせず)をマッピングするために

@RequestMapping(value = {"/{city:[\\w'-]+}-listings", "/{city:[\\w'-]+}-listings/{page}"}, method = RequestMethod.GET) 
public String city(@PathVariable("city") String city, @PathVariable Optional<Integer> page, Model model) { 
    // ... 
} 

及び使用を以下のように、メソッドの署名を変更することができ

mysite.com/pittsburgh-listings/2 
mysite.com/pittsburgh-listings/3 
etc.. 

マイコントローラ

@Controller 
public class CityController { 
    private static final int BUTTONS_TO_SHOW = 5; 
    private static final int INITIAL_PAGE = 0; 
    private static final int INITIAL_PAGE_SIZE = 40; 
    private static final int[] PAGE_SIZES = { 5, 10, 20, 40 }; 

    private AdService adService; 

    public CityController(AdService adService) { 
     this.adService = adService; 
    } 

    @RequestMapping(value = "/{city:[\\w'-]+}-listings", method = RequestMethod.GET) 
    public String city(@PathVariable("city") String city, Model model, @RequestParam("page") Optional<Integer> page) { 
     Database db = new Database(); 
     model.addAttribute("city", city.replace("-", " ")); 
     System.out.println(city.replace("-", " ")); 

     // List<Ad> ads = adService.getPage(1, city.replace("-", " ")); 
     // model.addAttribute("ads", ads); 

     int evalPageSize = INITIAL_PAGE_SIZE; 
     int evalPage = (page.orElse(0) < 1) ? INITIAL_PAGE : page.get() - 1; 
     Long cityId = null; 
     try { 
      cityId = db.getCityId(city.replace("-", " ")); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     Page<Ad> ads = adService.findAllPageable(new PageRequest(evalPage, evalPageSize, Sort.Direction.DESC, "id"), 
       cityId); 
     System.out.println("Ads: " + ads.getSize()); 
     Pager pager = new Pager(ads.getTotalPages(), ads.getNumber(), BUTTONS_TO_SHOW); 

     model.addAttribute("ads", ads); 
     model.addAttribute("selectedPageSize", evalPageSize); 
     model.addAttribute("pageSizes", PAGE_SIZES); 
     model.addAttribute("pager", pager); 
     return "city"; 
    } 
} 

答えて

1

Java 8ページ値を取得するためのオプション。

+0

私のThymeleafテンプレートには、ページリンク用に「th:href = "$ {page}" 'があり、mydomain.com/2のようなものが生成されます。私はすでに?例:mydomain.com/pittsburgh-listings/2 – Arya

関連する問題