更新:Answers by Leif Åstrand 之一解释说这两种方法实际上都存在于 Vaadin 14 中,但一种没有记录。
我确认我们确实可以调用:
ServletContext servletContext = VaadinServlet.getCurrent().getServletContext();
所以我的答案的其余部分已经过时了。我将把我的答案留作好奇,而不是删除它。
这可能不是最好的方法,但它似乎对我有用。
VaadinServletService 类扩展了com.vaadin.flow.server.VaadinService,提供了getCurrentServletRequest()。该方法返回一个javax.servlet.http.HttpServletRequest 对象。为此,我们可以调用javax.servlet.ServletRequest.getServletContext 来返回您想要的javax.servlet.ServletContext。
ServletContext servletContext =
VaadinServletService // com.vaadin.flow.server.VaadinServletService
.getCurrentServletRequest() // Returns a javax.servlet.http.HttpServletRequest
.getServletContext() // Returns a `javax.servlet.ServletContext`.
;
从那里您可以使用您提到的键值“属性”集合。查看setAttribute、getAttribute 和removeAttribute 方法,其中String 对象作为键,Object 作为值。
正在保存。
DataSource dataSource = … ;
VaadinServletService.getCurrentServletRequest().getServletContext().setAttribute( "javax.sql.DataSource" , dataSource ) ;
检索。 “属性”的键值集合将值保持为Object,因此我们必须转换回预期的类/接口。
DataSource dataSource = (DataSource) VaadinServletService.getCurrentServletRequest().getServletContext().getAttribute( "javax.sql.DataSource" ) ;