![](/img/trans.png)
[英]Best Practice to refresh the data in JSP without refreshing the whole page
[英]Best practice for adding data field to a header jsp
我正在编写一个小型Spring 4 MVC应用程序。 我是新手,我想我可能会尝试就这一点提供一些建议(很抱歉,我几个月以来一直在研究冬眠/春季,我的知识水平参差不齐,这使我在术语和缺乏理解)。
我正在向所有页面(jsp)添加标头jsp(或jspf)。 在这个早期阶段,我会为它们添加一个标签,因为include-prelude有时会停止工作,尽管如果有时间我可能会回过头来进行整理。 我认为这无关紧要...
在header.jsp中,我只想包含徽标,标题,指向帮助pdf的链接以及基础数据的最后更新日期(理想情况下,每天更新一次)。 这最后让我思考...
首先,在标题中包含数据是否合理? 而且,如果可以肯定的话,一次调用日期并将其存储在应用程序中的某个位置更有意义(对它的更改是否刷新并不重要,但我敢肯定,无论走到哪里,都有合理的方法可以做到这一点)。
其次,如果合理,那么这样做的最佳方法是什么? 我会创建一个具有一个属性的bean并在应用程序加载时填写日期吗(我猜我可以将其称为appConfig并添加更多属性)。
第三,如果这是合理的话,并且我感到非常恐怖,这是一个完整的问题……我将如何从标题访问此对象/数据。 或者我应该放弃并将其作为依赖项注入字段添加到主页中,并放弃将其放在标题中。
谢谢大家是否有时间帮忙...
为此使用HandlerInterceptor。 例:
public class LoadSiteDataInterceptor extends HandlerInterceptorAdapter {
@Autowired
private SiteDataRepository siteDataRepository;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
request.setAttribute("siteData", siteDataRepository.findOne(1L));
return super.preHandle(request, response, handler);
}
}
在mvc-dispatcher-servlet.xml
:
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<mvc:exclude-mapping path="/static/**"/>
<bean class="com.example.LoadSiteDataInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
这会在每次请求时从数据库加载数据。 您可能想要先将数据加载到单例bean中,或实现缓存。
然后,在JSP中,可以使用${siteData.someAttribute}
查看SiteMesh以获取JSP模板。
实现它的另一种方法是通过@ControllerAdvice并将其添加到ModelAttribute。 这样,您就可以在通过该控制器访问的所有页面中使用它。 该数据在您的模型中可用,名称为“ headerData”。
@ControllerAdvice
public class ControllersAdvice {
@ModelAttribute("headerData")
public HeaderData getHeaderData(HttpServletRequest request, HttpServletResponse response, ModelMap model) {
HeaderData headerData = new HeaderData();
// Get the header data and cache it. Set the cache timeframe to 1 day or whatever you want the frequency to be. This will be done using Spring @cacheable annotation.
// dump all the data that you want to headerData like logo, title , link etc
return headerData;
}
}
在header.jsp中,您可以通过${headerData}
进行访问。 通过缓存,您可以控制刷新频率。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.