我正在学习 Spring MVC,我对 model 的概念有一些疑问。
所以如果我有一个这样的 Controller :
@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”;
}
}
因此,在这个 Controller 中定义了 show() 方法,它处理 HttpRequest 到 /reward/show 路径并接受 2 个输入参数:
long id:从请求的 URL 中提取,类似于 /reward/show?id=1
Model 模型对象:我认为它包含与 View 共享的值。
因此,此 Controller 方法对数据库执行查询并获得放入模型对象的奖励对象。
所以我可以将这个简单的 View 命名为 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 的对象?我认为是这样,因为在 map 中,我有一对 ,其中 KEY 是字段名称,VALUE 是要在 View 中显示的特定值。
如果我之前的推理是正确的,那么 addAttribute() 是一种特定的 Spring 方法,用于将元素放入此 Map 中吗?为什么不直接使用Map的put()方法?
谢谢
最佳答案
Model其实就是一个接口(interface),里面声明了你说的addAttribute方法。在您的 Show 方法中,您有效地使用此接口(interface)访问 map 。
“put”方法无法通过 Model 接口(interface)使用,因此您需要使用 addAttribute(它对您的键/值参数执行基本的完整性检查,然后为您将它们“放入”底层映射中。
关于java - Spring MVC模型对象相关的一些疑惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29411012/