【发布时间】:2014-10-25 07:52:06
【问题描述】:
请帮帮我。 我有这样的控制器代码:
@RequestMapping(method = RequestMethod.GET)
public String showOrders(@RequestParam(value = "status", required = false) String status, Model model) {
if(status != null) {
Order.Status orderStatus = Order.Status.valueOf(status);
if (orderStatus != null) model.addAttribute("currentStatus", orderStatus);
}
return "admin/orders";
}
@ModelAttribute("currentStatus")
public Order.Status populateCurrentStatus() {
return Order.Status.PAYMENT;
}
@ModelAttribute("orders")
public List<Order> populateOrders(@ModelAttribute("currentStatus") Order.Status status) {
return orderBo.getByStatus(status);
}
我希望默认的currentStatus 等于Order.Status.PAYMENT,但是如果控制器收到带有参数status 的GET 请求(在方法showOrders 上),那么将模型中的currentStatus 替换为status 在请求中传输。
而populateOrders 应该根据新状态返回不同的订单列表。但不幸的是,这并没有发生。方法 populateOrders 总是得到 currentStatus 等于 Order.Status.PAYMENT 并且它永远不会改变。
【问题讨论】:
-
是的,因为这发生在
showOrders()。当请求转到带有@ModelAttribute的控制器方法时,首先执行,然后是映射器。因此,currentStatus被 GET 请求覆盖。 -
@DarshanLila 我的问题有什么解决方案?
-
在你的get方法中为
currentStatus使用不同的属性名。
标签: java spring-mvc model modelattribute