从Tiles调用控制器的更好方法?

时间:2012-11-18 14:51:38

标签: spring controller tiles

我在一个新的Spring MVC 3应用程序中使用Tiles 2。 这是我的模板

  <definition name="baseLayout" template="/WEB-INF/jsp/layout/layout.jsp"  >
        <put-attribute name="title" value="" />
        <put-attribute name="header" value="/WEB-INF/jsp/layout/header.jsp" />
        <put-attribute name="body" value="" />
        <put-attribute name="userInfo" value="" />
        <put-attribute name="footer" value="/WEB-INF/jsp/layout/footer.jsp" />
    </definition>

和我的页面

<definition name="engageStep1View" extends="baseLayout"  >
        <put-attribute name="title" value="" />
        <put-attribute name="body" value="/WEB-INF/jsp/private/engageStep1.jsp" />
        <put-attribute name="userInfo" value="/layout/userInfo" />
</definition>

我在tiles.xml定义中添加了下一行

<definition name="userInfoView" template="/WEB-INF/jsp/layout/userInfo.jsp"   />

更好的想法是对控制器进行enagageStep1调用:

  @RequestMapping(value = "/layout/userInfo")
    public ModelAndView handleRequest(ModelMap model) {

        ......
        MemberPrincipal memberPrincipal = (MemberPrincipal)authentication.getPrincipal();

        model.put("userName", memberPrincipal.getUserName());

        return new ModelAndView("userInfoView", "model", model);
    }

有什么想法吗?

由于

1 个答案:

答案 0 :(得分:0)

看起来您的userInfo控制器方法提供的信息可能适用于您的整个应用/网站。对于这种信息,您可以使用spring拦截器来填充当前属性上下文中所需的信息。然后userInfoView可以根据需要使用此信息,而无需引用userInfo控制器方法。

另一种类似的方法是使用tile视图preparer。