2017-07-18 106 views
1

我必須根據價格或名稱,升序或降序來訂購產品列表。 後端完成後,我只需發送一個參數,說明從下拉列表中選擇了哪個選項。如何在JSP中訂購包含商品的頁面

<!-- Dropdown for ORDER --> 
<label for="order" class="control-label">Order by</label> 
<select class="form-control" name="order" id="order" onchange="..."> 
    <option value="priceAsc" selected>Price: lowest first</option> 
    <option value="priceDesc">Price: highest first</option> 
    <option value="nameAsc">A - Z</option> 
    <option value="nameDesc">Z - A</option> 
</select> 

onchange,我已經嘗試了不同的東西像onchange="location=location + '/order/'+ this.options[this.selectedIndex].value;"和控制器I映射/order/{orderBy}"鏈接。 這種方法的問題是,一旦我點擊了一個項目,該鏈接將成爲/products/order/option_here,當我再次點擊,/order/option_here將再次在鏈路的末端添加,導致/products/order/option_here/order/option_here

我也嘗試過得到的RequestMethod.GETorder的價值,但沒有工作(我相信是因爲GET方法後的頁面結構完成)

這我想排序的頁面被稱爲/products,所以我怎麼能對它進行排序一旦用戶選擇了他的選擇?

這是我的方法@Controller

@RequestMapping(value = "/order/{orderBy}, method = RequestMethod.GET) 
public ModelAndView sortPageBy(@PathVariable String orderBy){ 
    ModelAndView modelAndView = new ModelAndView("viewProducts"); 
    List<Product> sortedProducts = productService.orderProducts(orderBy); 

    modelAndView.addObject("products", sortedProducts); 

    return modelAndView; 
} 

映射我們不允許使用jQuery。

+0

爲什麼你不準使用jQuery!最簡單的方法是在客戶端獲取參數orederBy並通過Ajax將其發送到您的控制器,然後獲取產品列表!我發現你在那裏有點複雜。 – PacMan

+0

我不會制定規則......只能遵循它們:\ – SnuKies

+0

您想在哪裏排序?在控制器?! –

回答

0

問題是location總是「評估」到當前的url,這是因爲url總是增加。 在您的情況下,最好將訂單映射爲請求參數。

例如

@RequestMapping(value = "/product", method = RequestMethod.GET) 
public ModelAndView sortPageBy(
    @RequestParam("order") String orderBy){ 
     . . . 
} 

和只需要調用的onsubmit在onchange事件

+0

它不起作用,我得到'HTTP狀態400'說'字符串'缺少 – SnuKies

+0

你可以檢查瀏覽器是否實際sumbit訂單參數? 請求url應該是類似於'http:// _ yourhost_/products?order = priceAsc' – gtosto

+0

這就是爲什麼我不知道該怎麼做 我正在尋找一種方法來實現 – SnuKies