java—使用vaadin cdi时以编程方式设置上下文参数

xxb16uws  于 2021-06-30  发布在  Java
关注(0)|答案(3)|浏览(306)

我用@cdiui注解了我的ui,不使用web.xml进行绑定。但是如何设置诸如debugmode、heartbeatintervall、closeidresessions之类的上下文参数呢?有没有一种方法可以注解这些特性或者在ui示例中传递它们?还是必须提供web.xml?system.getproperty(jboss属性处理)呢?谢谢你的线索。

6ovsh4lw

6ovsh4lw1#

虽然wypiprz提出的解决方案可以在应用程序中手动检索上下文参数,但实际上并不是一路有效。
特别是 setConfiguration() 对vaadin来说太晚了,无法真正使用配置的心跳间隔等。下面是我让它工作的一种方法。基本上是这里找到的解决方案,但有一个额外的 @WebInitParam 使cdi在内联servlet配置存在的情况下再次正确引导。

@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
{
}
bkhjykvo

bkhjykvo2#

试着实现你自己的 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();

我希望这有帮助。

ou6hu8tu

ou6hu8tu3#

此外,可以在属性文件中设置这些参数

vaadin.servlet.productionMode=true
vaadin.servlet.heartbeatInterval=55

相关问题