0

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

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

4

2 回答 2

0

当使用实现 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
        }


}
于 2013-09-03T09:36:04.800 回答
0

如果您的通用模块仅由 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请求,将自动调用getLoggedInUserfrom类来填充模型。在您看来,您只需使用CommonHandlerloggedInUser${loggedInUser}

于 2013-09-01T23:44:54.097 回答