我使用@CDIUI注释了我的UI,并且不使用web.xml进行绑定。但是如何设置上下文参数,如debugMode,heartbeatIntervall,closeIdleSessions ......?有没有办法在UI实例中注释这些功能或传递它们?或者我还要提供web.xml吗?那么System.getProperty(JBoss属性处理)呢?谢谢你的任何线索。
尝试以下列方式实现您自己的DeploymentConfiguration
:
public class ExampleUI extends UI {
private class ExampleConfiguration implements DeploymentConfiguration {
@Override
public int getHeartbeatInterval() {
return 30;
}
@Override
public boolean isCloseIdleSessions() {
return true;
}
}
@Override
protected void init(VaadinRequest request) {
getSession().setConfiguration(new ExampleConfiguration());
...
}
}
然后,您可以以标准方式获取ExampleUI
类之外的上下文参数:
VaadinSession.getCurrent().getConfiguration().getHeartbeatInterval();
VaadinSession.getCurrent().getConfiguration().isCloseIdleSessions();
我希望这有帮助。
虽然wypieprz提出的解决方案可以在您的应用程序中手动检索上下文参数,但它实际上并不是一直有效。
特别是setConfiguration()
发生得太晚,Vaadin实际上使用配置的心跳间隔等。以下是我让它工作的方式。基本上它是找到here的解决方案,但有一个额外的@WebInitParam
,以便在存在内联servlet配置的情况下再次正确地引导CDI。
@WebServlet(value = { "/*", "/VAADIN/*"
initParams = {
@WebInitParam(name = Constants.SERVLET_PARAMETER_UI_PROVIDER, value = "com.vaadin.cdi.CDIUIProvider")
})
@VaadinServletConfiguration(productionMode = false,
ui = MyVaadinUI.class,
closeIdleSessions = true,
heartbeatInterval = 10)
public static class Servlet extends VaadinServlet
{
}
此外,可以在属性文件中设置这些参数
vaadin.servlet.productionMode=true
vaadin.servlet.heartbeatInterval=55