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

时间:2013-06-06 13:52:02

标签: java vaadin vaadin7

我使用@CDIUI注释了我的UI,并且不使用web.xml进行绑定。但是如何设置上下文参数,如debugMode,heartbeatIntervall,closeIdleSessions ......?有没有办法在UI实例中注释这些功能或传递它们?或者我还要提供web.xml吗?那么System.getProperty(JBoss属性处理)呢?谢谢你的任何线索。

3 个答案:

答案 0 :(得分:2)

尝试以下列方式实施自己的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();

我希望这会有所帮助。

答案 1 :(得分:2)

虽然wypieprz提出的解决方案可以在您的应用程序中手动检索上下文参数,但它实际上并不是一直有效。

特别是setConfiguration()为Vaadin实际使用配置的心跳间隔等发生得太迟了。 以下是我开始工作的一种方式。基本上,它是找到here的解决方案,但是在存在内联servlet配置的情况下,还需要额外的@WebInitParam来使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
{
}

答案 2 :(得分:0)

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

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