gpt4 book ai didi

spring-mvc - Spring MVC @ModelAttribute 方法

转载 作者:行者123 更新时间:2023-12-03 15:18:13 26 4
gpt4 key购买 nike

关于Spring MVC的问题@ModelAttribute方法,在 Controller 中设置模型属性 @RequestMapping方法 verses 使用 @ModelAttribute 单独设置属性方法,哪一种被认为更好,更常用?

从设计的角度来看,从以下方面考虑哪种方法更好:

方法一

@ModelAttribute("message")
public String addMessage(@PathVariable("userName") String userName, ModelMap model) {

LOGGER.info("addMessage - " + userName);
return "Spring 3 MVC Hello World - " + userName;
}

@RequestMapping(value="/welcome/{userName}", method = RequestMethod.GET)
public String printWelcome(@PathVariable("userName") String userName, ModelMap model) {

LOGGER.info("printWelcome - " + userName);
return "hello";
}

方法二
@RequestMapping(value="/welcome/{userName}", method = RequestMethod.GET)
public String printWelcome(@PathVariable("userName") String userName, ModelMap model) {

LOGGER.info("printWelcome - " + userName);

model.addAttribute("message", "Spring 3 MVC Hello World - " + userName);

return "hello";
}

最佳答案

@ModelAttribute annotation根据使用方式的不同,有两个目的:

在方法级别

使用@ModelAttribute在方法级别为模型提供引用数据。 @ModelAttribute 注解的方法在选择的 @RequestMapping 之前执行带注释的处理程序方法。它们有效地使用通常从数据库加载的特定属性预先填充隐式模型。这样一个属性就可以通过 @ModelAttribute 访问。所选处理程序方法中带注释的处理程序方法参数,可能应用了绑定(bind)和验证。

换句话说;用 @ModelAttribute 注释的方法将填充模型中指定的“键”。这发生在 @RequestMapping 之前
在方法参数级别

在方法参数级别

当您放置 @ModelAttribute在方法参数上,@ModelAttribute将模型属性映射到特定的带注释的方法参数。这就是 Controller 获取对保存在表单中输入的数据的对象的引用的方式。

示例

方法级别

@Controller
public class MyController {
@ModelAttribute("productsList")
public Collection<Product> populateProducts() {
return this.productsService.getProducts();
}
}

所以,在上面的例子中,“ productsList ” 模型中的 @RequestMapping 之前填充被执行。

方法参数级别
@Controller
public class MyController {
@RequestMapping(method = RequestMethod.POST)
public String processSubmit(@ModelAttribute("product") Product myProduct, BindingResult result, SessionStatus status) {

new ProductValidator().validate(myProduct, result);
if (result.hasErrors()) {
return "productForm";
}
else {
this.productsService.saveProduct(myProduct);
status.setComplete();
return "productSaved";
}
}
}

here有关示例的详细信息。

关于spring-mvc - Spring MVC @ModelAttribute 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25011568/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com