Spring mvc SpringMVC-跨多个页面重用小部件

Spring mvc SpringMVC-跨多个页面重用小部件,spring-mvc,jspx,Spring Mvc,Jspx,通常,在构建页面时,您为该页面构建一个控制器,该控制器带有一个绑定到URL的RequestMapping以及一个RequestMethod.GET,您可以在其中设置需要在页面上显示的变量 我拥有的是一个新闻小部件,它将显示在每个页面上,如果它只显示在一个页面上,我将执行以下操作: @Controller @RequestMapping("/news") public class NewsController { @RequestMapping(method = RequestMetho

通常,在构建页面时,您为该页面构建一个控制器,该控制器带有一个绑定到URL的RequestMapping以及一个RequestMethod.GET,您可以在其中设置需要在页面上显示的变量

我拥有的是一个新闻小部件,它将显示在每个页面上,如果它只显示在一个页面上,我将执行以下操作:

@Controller
@RequestMapping("/news")
public class NewsController {

    @RequestMapping(method = RequestMethod.GET)
    public String setupForm(
            HttpServletRequest request,
            @Valid @ModelAttribute("RA") RA ra,
            ModelAndView modelAndView,
            Model model) {
        // do some stuff to ra, put values in model, ....
    }

}
<c:forEach var="article" items="${newsarticles}" >
    <h1>${article.title}</h1>
    ${article.body}
    <br />
</c:forEach>
在JSPX页面上,我有如下内容:

@Controller
@RequestMapping("/news")
public class NewsController {

    @RequestMapping(method = RequestMethod.GET)
    public String setupForm(
            HttpServletRequest request,
            @Valid @ModelAttribute("RA") RA ra,
            ModelAndView modelAndView,
            Model model) {
        // do some stuff to ra, put values in model, ....
    }

}
<c:forEach var="article" items="${newsarticles}" >
    <h1>${article.title}</h1>
    ${article.body}
    <br />
</c:forEach>

${article.title}
${article.body}

我试图解决的问题是,如何在所有页面上甚至在主模板中复制上述JSPX片段,而不必在RequestMapping中显式列出大量URL

在JSF中,我只需使用#{newsBean.newsactions}即可在所有页面上使用


请求拦截器可以工作,但是在没有请求拦截器的情况下,有没有更好的方法来实现这一点,或者请求拦截器是我唯一的选择?

一种方法可能是实现请求拦截器,但不是在每个请求中获取文章,而是将文章列表放在会话中,然后只捕获一次列表,保存到会话中,您只需检查会话中是否已存在该列表。

这是一个解决方案,但如果有人更新文章列表,会发生什么情况,您如何更新它?如果更新数据库中持久化的列表,可能需要使用AJAX路径并设置servlet?您可以使用另一个会话变量,该变量包含lastUpdated变量,并每隔一段时间更新列表。另一种方法可能是,当数据库中的列表更新时,也会更新数据库本身中的参数,该参数将包含上次更新的日期,请求查询该日期,将其与自己的上次更新进行比较,并仅在必要时刷新。实际上,这取决于操作的成本和信息的最新程度。如果不使用AJAX或在所有页面上复制逻辑,或添加令人头痛的解决方法,Spring MVC似乎无法完成我需要它做的事情。我们将尝试在Tapestry中实现这一点。