【问题标题】:Good way to define module in Spring mvc在 Spring mvc 中定义模块的好方法
【发布时间】:2013-09-01 21:08:52
【问题描述】:

我使用 Spring mvc 3.1 版本和 Apache Tiles 2.2.2 版本我想在我的应用程序页面中定义一些常用模块。 例如,我想在顶部、左侧和右侧定义一个菜单,......我所有的页面都将显示这些块。 我使用瓷砖来定义不同的块,瓷砖的某些部分实现了 ViewPreparer 因为我需要从数据库中获取信息,知道用户是否已登录,......每个瓷砖都负责自己的模块(获取数据,设置属性为jsp...)。

这是创建一些模块的好方法吗?或者我应该定义一个控制器来定义数据、业务……到所有页面模块? (左侧,右侧,菜单...)

【问题讨论】:

    标签: spring model-view-controller module tiles


    【解决方案1】:

    如果你的通用模块只包含 HTML,那么你如何做就没有关系了。瓷砖模板就足够了。

    问题是公共模块是否需要在控制器上填充模型。您不想在包含公共模块的每个控制器上复制代码。

    您可以采取的一种方法是使用填充通用模块模型的类对您的控制器进行子类化,例如:

    public class CommonHandler {
    
      @ModelAttribute("loggedInUser")
      public UserInfo getLoggedInUser() {
        // check and return logged in user if any here..
      }
    
    }
    
    @Controller
    public class MyController extends CommonHandler (
    
      @RequestMapping(..)
      public String myHandler() {
        // ...
      }
    
    }
    

    在上面的示例中,如果请求myHandler,则将自动调用来自CommonHandler 类的getLoggedInUser 来填充loggedInUser 模型。在您看来,您只需使用${loggedInUser} 获得它

    【讨论】:

    • 感谢您的回答 gerrytan。我应该只在 Tile 中写 html 吗?如果我的 tile 实现了 ViewPreparer,我可以从 tile 与服务通信并获取更多信息。我想保持模块独立于其他控制器,如果我的所有控制器都扩展 commonHandler 我所有的模块都耦合到控制器。您认为在扩展普通处理程序的 Controller 或 ViewPreparer 中定义模块更好吗?
    • 使用控制器可以获得Spring依赖注入,AOP等。对ViewPreparer不熟悉。
    • 我试过 ViewPreparer,它就像一个控制器(用于依赖注入......)
    【解决方案2】:

    当使用实现 ViewPreparer 的 ViewPreparerSupport 时,效果非常好:

    @Component
    public class MyPreparer extends ViewPreparerSupport {
    
            @Autowired
            private UtilisateurService utilisateurService;
    
            @Override
            public void execute(TilesRequestContext tilesContext,
                            AttributeContext attributeContext) {
                    //information to set for the jsp tile
            }
    
    
    }
    

    【讨论】:

      猜你喜欢
      • 2016-01-22
      • 1970-01-01
      • 2014-11-26
      • 2020-04-04
      • 2015-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-22
      相关资源
      最近更新 更多