Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在会话范围内保留变量而不使其成为静态变量?_Java_Jsf_Jsf 2_Scope_Java Ee 6 - Fatal编程技术网

Java 在会话范围内保留变量而不使其成为静态变量?

Java 在会话范围内保留变量而不使其成为静态变量?,java,jsf,jsf-2,scope,java-ee-6,Java,Jsf,Jsf 2,Scope,Java Ee 6,这是个新手问题,对不起 我开发了一个jsf-2应用程序(在Tomcat上),它在会话范围内声明了一个大的控制器bean 现在,我犯的错误是将这个bean中所有会话范围的变量作为静态变量,认为它们不会在应用程序的不同实例之间共享。但是它们是-静态变量在同一JVM上的应用程序的所有实例之间共享,这实际上是有意义的。无论如何,我所有的代码目前都是这样的: @SessionScoped @ManagedBean public ControllerBean{ static private String a

这是个新手问题,对不起

我开发了一个jsf-2应用程序(在Tomcat上),它在会话范围内声明了一个大的控制器bean

现在,我犯的错误是将这个bean中所有会话范围的变量作为静态变量,认为它们不会在应用程序的不同实例之间共享。但是它们是-静态变量在同一JVM上的应用程序的所有实例之间共享,这实际上是有意义的。无论如何,我所有的代码目前都是这样的:

@SessionScoped
@ManagedBean
public ControllerBean{
static private String aString = "session wide value for a string";
//static getter and setter for astring

}

@viewscoped
@ManagedBean
public class OneRandomViewScopedBean{
String oneString = ControllerBean.getAString();
//operations on this string...
ControllerBean.setAString(newValueForString);
} 
我能得到关于如何重构代码以删除ControllerBean中的静态变量的指针吗?我想解决办法非常简单,但我现在看不出来

注意:我不需要保存数据,因为卷很小,在应用程序关闭后它们可能会消失


谢谢

删除
static
修饰符(这确实是一个巨大的错误;这个问题不是JSF特有的,只是基本Java。在继续使用JSF之前,我真的会花更多的时间学习基本Java),并使用它来注入其他bean或其属性

@ManagedBean
@SessionScoped
public class ControllerBean {

    private String aString = "session wide value for a string";
    // Non-static getter and setter for aString.

    // ...
}

@ManagedBean
@ViewScoped
public class OneRandomViewScopedBean {

    @ManagedProperty("#{controllerBean}")
    private ControllerBean controllerBean;
    // Setter for controllerBean. Getter is not mandatory.

    public void someAction() {
        controllerBean.setAString(newValueForString);
    }

    // ...
} 
另见:

删除
静态
修饰符(这确实是一个巨大的错误;这个问题不是JSF特有的,只是基本Java。在继续使用JSF之前,我真的会在学习基本Java上投入更多的时间)并使用它注入其他bean或其属性

@ManagedBean
@SessionScoped
public class ControllerBean {

    private String aString = "session wide value for a string";
    // Non-static getter and setter for aString.

    // ...
}

@ManagedBean
@ViewScoped
public class OneRandomViewScopedBean {

    @ManagedProperty("#{controllerBean}")
    private ControllerBean controllerBean;
    // Setter for controllerBean. Getter is not mandatory.

    public void someAction() {
        controllerBean.setAString(newValueForString);
    }

    // ...
} 
另见:

您的目标是什么?为什么这些变量被声明为静态的?为什么你不能删除static关键字?@Fant:因为他想不出一种方法来获取/设置会话范围bean的当前实例的属性。答案已经给出:使用
@ManagedProperty
。你的目标是什么?为什么这些变量被声明为静态的?为什么你不能删除static关键字?@Fant:因为他想不出一种方法来获取/设置会话范围bean的当前实例的属性。答案已经给出:使用
@ManagedProperty