2012-01-29 41 views
3

我有一个1600行长的控制器。这主要是通过使用@ModelAttribute批注的大量公共方法来填充。它也有一些@RequestMapping方法。@ModelAttribute太多的公共方法

我想降低线数并分解这个类。你如何使用@ModelAttribute注解处理多种公共方法?每当处理请求时都不会调用它们吗?

回答

2

我有一个控制器,它是1600线长

杯。

如何用@ModelAttribute注解处理多种公共方法?每当处理请求时都不会调用它们吗?

当用于注释的方法,该注释表示该方法的返回值应该被用来填充用于通过该控制器类执行的每个请求的模式,而不管哪个被执行@RequestMapping方法。

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

一旦你找出了@ModelAttribute@RequestMapping方法结合在一起的组合,然后将它们分解成单独的类。

如果这样不行(可能所有的视图都确实使用了所有的数据),那么可以考虑全部从类中提取出@ModelAttribute方法,然后使用将它们的输出合并到一起的单一方法将它们拼接在一起手动(例如通过从@RequestMapping方法ModelModelMap对象到这个新的方法,该方法然后将模型的比特到该对象。

记住,@ModelAttribute -annotated方法只是增加额外的模型数据的便捷方式。他们不是唯一的方式。

+0

谢谢。我将在我们的代码中尝试这一点,并发布结果。我需要一个地方开始。 – pslk 2012-01-30 03:19:48

0

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

1

@ModelAttribute方法也可以返回void:

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