2017-07-18 98 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