当前位置: 首页 > 知识库问答 >
问题:

Vaadin会话超时和通信错误

傅边浩
2023-03-14

Vaadin7会话超时有几个问题。首先,即使我尝试将heartbeatinterval更改为20秒,Vaadin debug仍然说它是默认值300秒。

另一个问题是,除了通信错误消息之外,我根本无法获得会话超时消息。无论会话是1分钟还是2分钟,或者比heartbeatinterval更长的时间都无关紧要。

第三个问题是,在通信错误消息中总是有“无效的JSON-response from server text”,我不知道如何消除这个问题。

<context-param>
    <param-name>heartbeatInterval</param-name>
    <param-value>20</param-value>
</context-param>
 <context-param> 
    <param-name>closeIdleSessions</param-name>
    <param-value>true</param-value>
</context-param>

共有1个答案

戚俊人
2023-03-14

可以使用自己的系统消息提供程序类重写这些消息。当这些错误发生时,我已经用它把用户带到一个不同的URL,这样我就可以在Google analytics中跟踪它们,但是如果你愿意的话,你可以更改消息的标题和内容。

您将需要一个SystemMessagesProvider,并且需要在主UI类中添加以下内容:

VaadinService.getCurrent().setSystemMessagesProvider(new MyMessageProvider);

您的SystemMessagesProvider应如下所示:

import com.vaadin.server.CustomizedSystemMessages;
import com.vaadin.server.SystemMessages;
import com.vaadin.server.SystemMessagesInfo;
import com.vaadin.server.SystemMessagesProvider;

public class MyMessageProvider implements SystemMessagesProvider {

    @Override
    public SystemMessages getSystemMessages(SystemMessagesInfo systemMessagesInfo) {


        CustomizedSystemMessages systemMessages = new CustomizedSystemMessages();

        systemMessages.setCommunicationErrorURL("/systemError?error=communicationError");
        systemMessages.setCommunicationErrorNotificationEnabled(false);

        systemMessages.setInternalErrorURL("/systemError?error=internalError");
        systemMessages.setInternalErrorNotificationEnabled(false);

        systemMessages.setSessionExpiredURL("/systemError?sessionTimeout");
        systemMessages.setSessionExpiredNotificationEnabled(false);

        return systemMessages;
    }
 类似资料:
  • 我有一个问题发生在我坐在空闲的时候,没有接触网络浏览器,vaadin在点击vaadin应用程序中的任何内容之后,就会抛出红色的通信问题错误消息。 我已经通过30分钟不接触浏览器进行了测试。之后,当我单击vaadin应用程序中的一个按钮时,它会抛出通信错误消息。 我有两个应用服务器,它们位于Rackspace的负载均衡器后面。我还启用了“粘性会话”... vaadin可能有自己的超时吗?

  • 有什么想法吗?

  • 我正在开发一个vaadin web应用程序,我在web.xml中添加了以下代码片段。 现在我注意到,也在30分钟后,我的用户能够使用应用程序,我不想这样。我在vaadin的书上读到了一些关于这个问题的东西,但我并不了解一些东西。 在web.xml中: 会话超时应长于心跳间隔,否则会话在心跳保持活动之前就已关闭。由于会话过期使UI处于假定会话仍然存在的状态,这将在浏览器中导致不同步错误通知。 但是,

  • 在我的Vaadin应用程序中,当Vaadin在“session Timeout”消息之后没有使会话无效时,我遇到了一个问题。收到此消息后,用户有时可以单击链接或刷新页面,并继续工作,就像他们仍在登录一样。我使用以下参数: Last参数(session-timeout)也在context.xml(session-timeout=900)和web.xml(session-config/session-

  • 我正在使用JPAContainer和Hibernate4.3开发一个Vaadin webapp。我遵循了这个链接的说明,成功地实现了EntityManager-per-Request模式。这意味着惰性加载可以很好地用于JPAContainer 但是,每次我需要使用纯JPA时,它都无法延迟负载。 下面是一个示例代码: 另外,当我从JPAContainer中移除实体时,我会收到一个错误:org.hib

  • 在 HTTP 协议中,当客户端不再处于活动状态时没有显示的终止信号。这意味着当客户端不再处于活跃状态时可以使用的唯一机制是超时时间。 Servlet 容器定义了默认的会话超时时间,且可以通过 HttpSession 接口的 getMaxInactiveInterval 方法获取。开发人员可以使用HttpSession 接口的 setMaxInactiveInterval 方法改变超时时间。这些方法