如何组织和使用Spring实现jsp文件结构

时间:2010-12-19 12:55:15

标签: spring spring-mvc

我是一名php程序员,正在使用Spring框架进行Java Web项目。我正在尝试按照我在php中组织我的.tpl文件的方式来组织我的JSP文件。

所以,如果它本来是php我就会这样做:

  • 在index.tpl
    • 包括layout.tpls之一(ajax.tpl,mobile.tpl,general.tpl,simplified.tpl ...)
      • 包含页面标题
      • 包含菜单
      • 包含页面的实际内容
      • 包含页脚

然后从php控制器我可以做这样的事情:

setLayout('general');
showTopMenu(false);
setContent('mySexyPage');

旁边我会组织我的东西,以便我的视图(tpl文件)将组织在文件夹中,每个对应一个控制器。像这样:

  • 的UserManager
    • addUSer.tpl
    • editUser.tpl
    • editUserPermissions.tpl
  • articleManager
    • addArticle.tpl
    • editArticle.tpl

并在每个控制器中以某种方式定义从哪个文件夹加载我的内容模板。

现在在Spring中我有一个控制器,它有方法处理请求,每个方法返回视图应该是什么。我可以从一个抽象类扩展我的所有控制器,我将创建一个ModelAndView实例,并设置所有默认值,然后请求处理方法将他们需要的内容添加到他们爸爸已创建的实例并返回它。

上述方法的问题在于,我并没有强迫编写控制器的编码人员使用我创建的ModelAndView对象,他仍然可以从他编写的处理方法中返回任何他想要的东西。

是否有一些接口包含类似ModelAndView getModelAndView()的方法,我的爸爸控制器会实现,所以Spring会忽略返回的处理程序方法?

或者有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

内容模板问题

Java世界有一个(实际上不止一个,但我坚持我所知道的)这个问题的解决方案,它被称为 Tiles 。查看Spring 3.0.5 Reference的第16部分。

ModelAndView问题

这更有趣。首先,您可以将模型与out视图一起使用,让控制器只返回视图名称(返回String)。我相信你想在某个地方创建初始模型。然后让每个控制器hander方法接受Model类型的参数。 这是我倾向于做的事情(没有声称它是最佳实践):

  • 设置一个设置初始值的Controller.get(模型模型)方法。
    
    @RequestMapping(method = RequestMethod.GET)
    public String get(Model model)
    { ... set default stuff ... }
  • 每个处理程序方法都是这样的变体:
    
    @RequestMapping(value = "/search", method = RequestMethod.POST)
    public String search(Model model, ... other stuff as needed ...)
    { ... set stuff in model ... }