使用默认属性填充模型

时间:2014-06-19 12:20:02

标签: java spring-mvc

我正在使用Spring-MVC框架构建一个网站。在模板中,我想要包含一些“通用”信息。通用的方式,这不是特定于当前控制器,但在每个页面上使用。这可以是生成的菜单,用户登录的分钟数或北极的当前温度。

我目前正在做什么
我创建了一个抽象类,其方法是使用默认值填充模型。我的控制器扩展了这个类,我在每个(@ RequestMapping-ed)方法中都调用了这个方法,这是一个缺点。感觉有点hacky并且不是很灵活。

@Component
public abstract class AbstractBaseController {
    @Autowired private SomeService someService;

    protected void populateModel(Model model) {
        model.addAttribute("value", someService.getGenericValue());
    }
}
@Controller
public class HomeController extends AbstractBaseController {
    @RequestMapping("/") public String index(Model model) {
        populateModel(model);
        return "home";
    }
}

我的问题
我应该如何在视图中提供这些通用属性。有没有比我现在做的更好的方式?

(我使用Spring / Spring-MVC 4,JavaConfig,Thymeleaf with thymeleaf-layout-dialect)

1 个答案:

答案 0 :(得分:0)

好的,所以我实际上并不那么难。您可以使用@ModelAttribute注释方法,使其在模板中可用。

@Component
public abstract class AbstractBaseController {
    @Autowired private SomeService someService;

    @ModelAttribute("value")
    protected String getValue() {
        return someService.getGenericValue());
    }
}

请注意,此方法将始终被调用。此外,在模板中未调用${value}时。所以它不比我在问题中描述的方法更“灵活”。