有些怀疑与Spring MVC模型对象有关

时间:2015-04-02 10:46:11

标签: java spring spring-mvc model-view-controller annotations

我正在学习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参数:

  • 长ID :这是从请求的网址中提取的内容,例如 / reward / show?id = 1

  • 模型模型对象:我认为它包含要在视图中进行锐化的值。

因此,此控制器方法对数据库执行查询并获取放入模型对象的奖励对象。

所以我可以将这个简单的视图命名为例如 rewardView.jsp (名称和路径由Spring 视图解析器自动构建),显示**模型的内容对象:

<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>

所以我怀疑是:

  1. 模型对象是Java Map 的特定实现,还是包装Map的对象?我这么认为是因为,就像在地图中一样,我有一对 ,其中KEY是字段名称,VALUE是其在视图中显示的特定值。

  2. 如果我之前的推理是正确的, addAttribute()是一个特定的Spring方法,可以将一个元素放入这个Map中吗?为什么不直接使用Map put()方法?

  3. TNX

3 个答案:

答案 0 :(得分:3)

Model实际上是一个接口,它声明了你提到的addAttribute方法。在Show方法中,您可以有效地使用此界面访问Map。

&#34; put&#34;方法不能通过Model接口获得,因此您需要使用addAttribute(它对您的键/值参数执行基本的健全性检查,然后&#34;将它们放入底层地图中。

答案 1 :(得分:2)

ExtendedModelMap模型对象的实现。

这个类正在扩展ModelMap,它本身正在扩展HashMap。

addAttribute 名称更有意义,因为我们在servlet / web环境中使用它。

答案 2 :(得分:2)

model(MVC中的M)是Map interface,它允许完全抽象视图技术。您可以直接与基于模板的渲染技术(如JSP,Velocity和Freemarker)集成,也可以直接生成XML,JSON,Atom和许多其他类型的内容。模型Map简单地转换为适当的格式,例如JSP请求属性,Velocity模板模型。