1

私はtomcat7.0とJSF2.1を使用していますが、.xhtmlページを次のように呼び出すと問題が発生します。 #{homePage.get("userName")}

javax.el.E​​LExceptionが発生します:原因:mainPacket.HomePageBean.get(HomePageBean.java:35)のjava.lang.NullPointerException

私は以下のようなManagedBeanを持っています:

@ManagedBean(name = "homePage")
@ViewScoped
public class HomePageBean {
    private Map<String, Object> map;

    public HomePageBean() {
        map= FacesContext.getCurrentInstance().getExternalContext().getSessionMap();
        //remove unnecessary values from sessionMap
        FacesContext.getCurrentInstance().getExternalContext().getSessionMap().clear();

    }
    public String get(Object s){
        return map.get(s).toString();
    }
}

clearを使用しない場合は、すべて問題なく動作します。しかし、sessionMapをクリアしたいと思います。それを解決する方法は?ありがとう

4

1 に答える 1

0

Javaはオブジェクト指向言語です。要求するたびにオブジェクトのコピーが提供されるわけではありません。いいえ、メモリ内のオブジェクトインスタンスへの参照を提供します。Map#clear()セッションマップで呼び出した時点で、map直前に取得した参照基本的に空になります。これは、空にしたばかりのマップインスタンスを指しているためです。

あなたの具体的な機能要件は質問のどこにも言及されておらず、これまでに投稿されたコードのデザイン全体は正直なところまったく意味がありません(これに対する賢明な実際のユースケースは想像できません)ので、正しい解決策を提案するのは難しいです。あなたが得ることができる最良のものは、nullcheckを追加するためのアドバイスです。

public String get(Object s){
    Object value = map.get(s);
    return (value != null) ? value.toString() : null;
}

ちなみに、この方法でセッションマップを突然空にする場合は、十分に注意する必要があります。JSFは、ビュースコープとセッションスコープのマネージドBeanをそこに格納し、フラッシュスコープでも使用されます。

于 2012-11-03T00:00:08.633 に答える