【发布时间】:2015-06-07 07:02:49
【问题描述】:
我正在研究Spring MVC,我对模型的概念有一些疑问。
如果我有这样的控制器:
@Controller
public class RewardController {
private RewardLookupService lookupService;
@Autowired
public RewardController(RewardLookupService svc) {
this.lookupService = svc;
}
@RequestMapping("/reward/show")
public String show(@RequestParam("id") long id, Model model) {
Reward reward = lookupService.lookupReward(id);
model.addAttribute(“reward”, reward);
return “rewardView”;
}
}
因此,在此控制器中定义了 show() 方法,该方法将 HttpRequest 处理到 /reward/show 路径并接受 2 个输入参数:
long id:从请求的 URL 中提取,类似于 /reward/show?id=1
模型模型对象:我认为它包含与视图共享的值。
所以这个控制器方法在数据库上执行查询并获得一个 Reward 对象,该对象放入 Model 对象中。
所以我可以将这个简单的视图命名为例如 rewardView.jsp(名称和路径由 Spring view resolveréé 自动构建)显示 **Model 的内容 对象:
<html>
<head><title>Your Reward</title></head>
<body>
Amount=${reward.amount} <br/>
Date=${reward.date} <br/>
Account Number=${reward.account} <br/>
Merchant Number=${reward.merchant}
</body>
</html>
所以我的疑问是:
Model 对象是 Java Map 的特定实现还是包装 Map 的对象?我这么认为是因为,就像在地图中一样,我有几个 ,其中 KEY 是字段名称,VALUE 是要在视图中显示的特定值。
如果我之前的推理是正确的,那么 addAttribute() 是一种将元素放入此 Map 的特定 Spring 方法?为什么不直接使用 Map put() 方法?
Tnx
【问题讨论】:
-
是的,您或多或少是正确的,模型是一个接口,因此它取决于具体的实现,但它基本上旨在允许您添加到底层地图并作为访问整个模型地图
标签: java spring spring-mvc model-view-controller annotations