2012-08-15 52 views
0

通常在構建頁面時,可以使用綁定到URL的RequestMapping以及RequestMethod.GET構建該頁面的控制器,您可以在其中設置需要顯示在頁。Spring MVC - 在多個頁面上重複使用小部件

我所擁有的是將每一個頁面上顯示,如果它只是顯示在一個頁面上,我會做一些像一個新聞窗件:

@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, .... 
    } 

} 

而且JSPX頁我上d具有類似:

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

我試圖解決的問題是如何複製的,甚至在主模板的所有頁面上JSPX片段,而不必明確列出的RequestMapping一個極大的URL。

在JSF中,我會簡單地使用#{newsBean.newsarticles},它可以在所有頁面上工作。

請求攔截器將工作,但有沒有更好的方式來做到這一點沒有RequestInterceptor,或者是RequestInterceptor我唯一的選擇?

回答

1

一種方法可能是實現RequestInterceptor,但不是抓取每個請求上的文章,而是將文章列表放入會話中,然後列表只抓取一次,保存到會話中,然後您只需檢查以查看如果該列表已經存在於會話中。

+0

這是一個解決方案,但如果有人對文章列表進行更新會發生什麼,您如何更新? 可能需要去AJAX路線並設置一個servlet ... – 2012-08-23 19:25:31

+0

如果您更新數據庫中保存的列表?你可以有另一個包含lastUpdated變量的會話變量,並且每隔一段時間更新列表。當數據庫中的列表更新時,另一種方式是更新數據庫本身中包含最後一次更新日期的參數,請求查詢該日期,檢查它是否是自己的lastUpdated,並僅在必要時進行刷新。真的取決於操作的成本以及信息的最新情況。 – dardo 2012-08-23 20:07:14

+0

看來,Spring MVC無法做到我需要做的事情,而無需使用AJAX或複製所有頁面上的邏輯或添加削弱解決方法。試圖在Tapestry中實現這一點。 – 2012-08-25 12:20:26

相關問題