如何在JSP中订购包含商品的页面
问题描述:
我必须根据价格或名称,升序或降序来订购产品列表。 后端完成后,我只需发送一个参数,说明从下拉列表中选择了哪个选项。如何在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.GET
order
的价值,但没有工作(我相信是因为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。
答
问题是location
总是“评估”到当前的url,这是因为url总是增加。 在您的情况下,最好将订单映射为请求参数。
例如
@RequestMapping(value = "/product", method = RequestMethod.GET)
public ModelAndView sortPageBy(
@RequestParam("order") String orderBy){
. . .
}
和只需要调用的onsubmit在onchange事件
为什么你不准使用jQuery!最简单的方法是在客户端获取参数orederBy并通过Ajax将其发送到您的控制器,然后获取产品列表!我发现你在那里有点复杂。 – PacMan
我不会制定规则......只能遵循它们:\ – SnuKies
您想在哪里排序?在控制器?! –