Spring MVC模型对象相关的一些疑惑
Some doubts related to Spring MVC model object
我正在研究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
Model 模型 对象:我认为它包含与视图共享的值。
所以这个控制器方法在数据库上执行查询并获得一个 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 的特定实现还是一个对象包装地图?我这么认为是因为,就像在地图中一样,我有几个 ,其中 KEY 是字段名称,VALUE 是要在视图中显示的特定值。
如果我之前的推理是正确的,那么 addAttribute() 是一种特定的 Spring 方法,用于将元素放入此 Map 中?为什么不直接使用Mapput()方法?
Tnx
Model其实就是一个接口,里面声明了你说的addAttribute方法。在您的 Show 方法中,您有效地使用此接口访问地图。
"put" 方法无法通过模型接口使用,因此您需要使用 addAttribute(它对您的 key/value 参数执行基本的健全性检查,然后 "puts" 它们进入为您准备的底层地图。
ExtendedModelMap 是 Model 对象的实现。
这个 class 正在扩展 ModelMap,它本身正在扩展 HashMap。
和addAttribute名称更有意义,因为我们在servlet/web环境中使用它。
model
(MVC中的M)是一个Map interface
,它允许对视图技术进行完全抽象。您可以直接与基于模板的渲染技术集成,例如 JSP、Velocity 和 Freemarker,或者直接生成 XML、JSON、Atom 和许多其他类型的内容。模型Map只是简单的转化为合适的格式,比如JSP请求属性,一个Velocity模板模型
我正在研究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
Model 模型 对象:我认为它包含与视图共享的值。
所以这个控制器方法在数据库上执行查询并获得一个 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 的特定实现还是一个对象包装地图?我这么认为是因为,就像在地图中一样,我有几个 ,其中 KEY 是字段名称,VALUE 是要在视图中显示的特定值。
如果我之前的推理是正确的,那么 addAttribute() 是一种特定的 Spring 方法,用于将元素放入此 Map 中?为什么不直接使用Mapput()方法?
Tnx
Model其实就是一个接口,里面声明了你说的addAttribute方法。在您的 Show 方法中,您有效地使用此接口访问地图。
"put" 方法无法通过模型接口使用,因此您需要使用 addAttribute(它对您的 key/value 参数执行基本的健全性检查,然后 "puts" 它们进入为您准备的底层地图。
ExtendedModelMap 是 Model 对象的实现。
这个 class 正在扩展 ModelMap,它本身正在扩展 HashMap。
和addAttribute名称更有意义,因为我们在servlet/web环境中使用它。
model
(MVC中的M)是一个Map interface
,它允许对视图技术进行完全抽象。您可以直接与基于模板的渲染技术集成,例如 JSP、Velocity 和 Freemarker,或者直接生成 XML、JSON、Atom 和许多其他类型的内容。模型Map只是简单的转化为合适的格式,比如JSP请求属性,一个Velocity模板模型