繁体   English   中英

将数据字段添加到标头jsp的最佳实践

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM