java - Spring MVC模型对象相关的一些疑惑

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

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

所以我的疑惑是:

  1. Model 对象是 Java Map 的特定实现还是包装 Map 的对象?我认为是这样,因为在 map 中,我有一对 ,其中 KEY 是字段名称,VALUE 是要在 View 中显示的特定值。

  2. 如果我之前的推理是正确的,那么 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/

相关文章:

java - 意外的 MVEL2 行为

java - 已删除软锁定缓存条目。失衡的锁定/解锁序列?

java - 构造函数 Category(String, String) 不可见 - 使用 lombok 为某些字段创建构造函数?

java - DefaultAdvisorAutoProxyCreator 导致 @Autowired 依赖项保持为空

java - RadioButton 自行取消选中

java - 事后添加 i18n 支持

Java JPA Hibernate Spring @EntityListeners 抛出 org.springframework.dao.DataIntegrityViolationException

spring - 请求的资源在项目启动 spring mvc 时不可用

java - 在Spring Boot应用程序上继续收到白标错误吗?

java - 如何使用java/python使用云栈API?