我正在使用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)
答案 0 :(得分:0)
好的,所以我实际上并不那么难。您可以使用@ModelAttribute
注释方法,使其在模板中可用。
@Component
public abstract class AbstractBaseController {
@Autowired private SomeService someService;
@ModelAttribute("value")
protected String getValue() {
return someService.getGenericValue());
}
}
请注意,此方法将始终被调用。此外,在模板中未调用${value}
时。所以它不比我在问题中描述的方法更“灵活”。