【发布时间】:2014-06-20 21:59:09
【问题描述】:
我正在使用 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 和 thymeleaf-layout-dialect)
【问题讨论】:
-
你的模板引擎是什么?您使用什么技术来渲染页面?从我的角度来看,最好的方法是定义一个单独的控制器方法来传递此信息,并将此方法与@RequestMapping“绑定”到特定的页面区域。然后,您可以通过页面的 JavaScript 请求请求您的“通用”属性,并将此数据作为例如 JSON 提供。
-
如文章底部所述,我正在使用 Thymeleaf。如果我理解正确,您的建议将意味着额外的 http 请求来获取数据。你确定这是可取的吗?
-
是的,在这种情况下,您的任何控制器都不需要知道此属性。它们对于业务逻辑是绝对透明的。这只是与“通用”属性的传递相关的一种特定方法。
标签: java spring-mvc