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