Java 标签或页面片段中使用的Spring MVC公共模型属性

Java 标签或页面片段中使用的Spring MVC公共模型属性,java,jsp,spring-mvc,model-view-controller,Java,Jsp,Spring Mvc,Model View Controller,在一个网站中,通常会有许多页面请求相同的模型属性,例如,呈现当前用户名的标题,或者需要一些基于服务器的信息的列 ... <body> <mytaglib:header/> ... <jsp:include page="footer.jsp"/> ... </body> 。。。 ... ... 最简单的解决方案是,您编写的每个返回使用页眉或页脚的视图的控制器方法也会添加其中包含的组件所需的所有属性,但随着网站的发展,可能会变得难以处理,特别是当您

在一个网站中,通常会有许多页面请求相同的模型属性,例如,呈现当前用户名的标题,或者需要一些基于服务器的信息的列

...
<body>
<mytaglib:header/>
...
<jsp:include page="footer.jsp"/>
...
</body>
。。。
...
...
最简单的解决方案是,您编写的每个返回使用页眉或页脚的视图的控制器方法也会添加其中包含的组件所需的所有属性,但随着网站的发展,可能会变得难以处理,特别是当您开始处理不完全具有相同组件的页面时


有没有一种方法可以封装基于子页面或标签添加到模型中的逻辑?

好的,您可以通过几种方法来实现。以下是大家的心声:

  • 将您的逻辑放在一个将信息放在请求范围内的列表中

  • Spring有一个类似于过滤器的东西,称为。您可以将逻辑放在此处,然后再次将其保存在请求范围中

  • 将逻辑置于插入页面的自定义标记后面。这样做有一个缺点,因为必须在每个JSP中插入标记。如果您使用的是像这样的decorator过滤器,那么您可以将其放在decorator JSP中一次,然后使用它

  • 在父控制器中具有所有控制器都将扩展的逻辑


  • 您是否特别使用框架?如果您只使用servlet,我建议您创建一个基本servlet类,如果使用spring,我建议您创建一个基本spring MVC控制器。您可以从基类设置这些属性,也可以使用过滤器:)

    我在应用程序中使用Apache Tiles作为一种视图技术。它有一个ViewPreparer的概念,我正是为了这个目的而使用它的。每个磁贴都有一个ViewPreparer,并且仅当其磁贴是当前视图的一部分时才会调用它。在ViewPreparer中,它将所有数据放入其tile/jsp所需的requestScope中。我认为用任何视图技术实现类似的东西都相当容易。