有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java序列化FacesContext或如何在服务器重新启动后获取属性值

问题如下:我需要序列化用户会话,因此,在服务器重新启动后,它仍然存在

使用JavaEE和Tomcat 7可以很好地处理implements Serializable,但问题是FacesContext。实际上,在重新启动服务器之后,FacesContext.getCurrentInstance()返回null,因此我无法访问消息包(因此我的message.properties再也找不到了)

那么,重新启动Tomcat时如何保持FacesContext


共 (1) 个答案

  1. # 1 楼答案

    您的问题描述不清楚,但症状表明您正试图将FacesContext的当前实例作为实例变量保存在任何地方。您根本不应该这样做,您应该始终在本地方法范围内获取当前实例

    所以,你应该永远不要做

    private FacesContext context;
    
    public Bean() {
        context = FacesContext.getCurrentInstance();
    }
    
    public void someMethod() {
        context...doSomething();
    }
    

    但你应该这样做:

    public void someMethod() {
        FacesContext.getCurrentInstance()...doSomething();
    }
    

    否则,会话范围的bean只包含创建该bean的第一个HTTP请求的实例。确切地说,这个HTTP请求在相关响应的末尾被丢弃,在任何后续请求中都不再有效。因此FacesContext绝对不应该是可序列化的