我在Vaadin 7会话超时方面遇到了一些问题。首先,即使我试图将heartbeatinterval改为20秒,Vaadin调试仍然说它默认值为300秒。
另一个问题是我根本无法获得会话超时消息,而是通信错误消息。无论会话是1分钟还是2分钟,还是比心跳间隔更重要。
第三个问题是通信错误消息中始终存在“来自服务器文本的无效JSON响应”,我不知道如何摆脱它。
<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>
答案 0 :(得分:1)
您可以使用自己的系统消息提供程序类覆盖这些消息。我在发生这些错误时使用此功能将用户带到其他网址,以便我可以在Google分析中跟踪它们,但如果您愿意,可以更改邮件的标题和内容。
您需要一个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;
}