我使用Spring mvc 3.1版本和Apache Tiles 2.2.2版本我想在我的应用程序页面中定义一些常用模块。 例如,我想在顶部,左侧和右侧定义一个菜单..我的所有页面都将显示这些块。 我使用Tiles来定义不同的块,tile的某些部分实现了ViewPreparer,因为我需要从数据库获取信息,知道用户是否被记录,...每个tile对其自己的模块负责(获取数据,设置属性为JSP ...)。
这是创建一些模块的好方法吗?或者我应该定义一个控制器谁将定义数据,业务...到所有页面模块? (左侧,右侧,菜单......)
答案 0 :(得分: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
,将自动调用来自getLoggedInUser
类的CommonHandler
来填充loggedInUser
模型。在您的视图中,您只需使用${loggedInUser}
答案 1 :(得分: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
}
}