文字列ではないセッションに属する属性オブジェクトは、リンクされたハッシュマップに変換され、各インスタンス変数の名前がその値の名前にマッピングされます。あまりにも複雑でないオブジェクトの場合、セッションの属性に属するこのオブジェクトに関連付けられているリンクハッシュマップの各キーにアクセスして、これらの値をフェッチして、そのようにオブジェクトを再構築することができます。ただし、インスタンス変数に関連付けられたゲッターが必要です。セッションの属性に格納されているオブジェクトを、必要なオブジェクトに直接キャストすることはできません。私はこれをオブジェクトを再構築することができ、これは「MY_DOG」のキーと私のセッションの属性に保存されている場合
public class Dog{
private String name = "Spot";
private int age = 20;
public Dog(){
}
public Dog(String nIn, int aIn){
name = nIn;
age = aIn;
}
public int getAge(){
return age;
}
public String getName(){
return name;
}
}
:
それでは、二つのフィールドで、例えば、私は犬のオブジェクトを持っている、としましょうway:
LinkedHashMap<String, Object> myDog = (LinkedHashMap<String, Object>)session.getAttribute("MY_DOG");
String fetchedName = (String)myDog.get("name"); //this will return "Spot"
int fetchedAge = (Integer)myDog.get("age"); //this will return 20
Dog copyDog = new Dog(fetchedName, age);//effectively copies the Dog object