0

初歩的な質問です、すみません。

セッションスコープで宣言された大きなコントローラーBeanを持つjsf-2アプリ(Tomcat上)を開発しました。

さて、私が犯した間違いは、アプリケーションの異なるインスタンス間で共有されないと考えて、すべてのセッション スコープ変数を静的変数としてこの 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 の静的変数を削除するためにコードをリファクタリングする方法についての指針を得ることができますか? 解決策は非常に単純だと思いますが、今はわかりません。

注: ボリュームが小さく、アプリを閉じた後に消える可能性があるため、データを永続化する必要はありません

どうも!

4

1 に答える 1

6

修飾子を削除しstatic(これは大きな間違いでした。この問題は JSF 固有のものではなく、基本的な Java にすぎません。JSF を続行する前に、基本的な Java の学習にもう少し時間を費やしたいと思います)、@ManagedProperty他の 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);
    }

    // ...
} 

以下も参照してください。

于 2012-11-14T13:12:55.110 に答える