使用@ModelAttribute的公共方法太多了

时间:2012-01-29 19:30:36

标签: spring spring-mvc controller refactoring public-method

我有一个1600线长的控制器。这主要是使用@ModelAttribute注释的一堆公共方法填充的。它还有一些@RequestMapping方法。

我想降低行数并分解这个课程。如何使用@ModelAttribute注释处理多个公共方法?他们在处理请求时都会调用它们吗?

3 个答案:

答案 0 :(得分:2)

  

我有一个1600行的控制器

杯。

  

如何使用@ModelAttribute注释处理多个公共方法?是否在处理请求时都会调用它们?

当用于注释方法时,此注释指示方法的返回值应该用于为该控制器类执行的每个请求填充模型,而不管执行哪个@RequestMapping方法。

我的建议是,您执行审核以查看哪些视图(例如JSP)使用各种@ModelAttribute方法提供的模型数据。每个视图可能只使用该数据的一个子集。

一旦你弄清楚@ModelAttribute@RequestMapping方法的哪些组合在一起,然后将它们分解为单独的类。

如果没有飞行(也许所有视图都确实使用了所有数据),那么考虑完全从类中提取@ModelAttribute方法,并使用合并的单一方法将它们拼接在一起他们的输出一起手动(例如,将ModelModelMap对象从@RequestMapping方法传递给这个新方法,然后将该模型的位添加到该对象。

请记住,@ModelAttribute - 带注释的方法只是添加额外模型数据的便捷方式。他们不是唯一的方式。

答案 1 :(得分:1)

@ModelAttribute方法也可以返回void:

@ModelAttribute
public void populateModel(Model model) {
    model.addAttribute("key", "value");
    // keep adding any number of attributes...
}

答案 2 :(得分:0)

您不能将多个@ModelAttribute组合在一起吗?例如,如果您有三个方法用于检索三个不同选择框的值,则可以将它们全部放入一个方法中。