4

Tomcatで実行され、アプリサーバー間でセッションレプリケーションが実行されているGrailsアプリケーションで、次のようにhttpセッションでマップを保存すると、例外が発生しました。GrailsParameterMapはシリアル化できません-

session.nextUrl = [controller: controllerName,
                               action: actionName,
                               params: params]

上記のスニペットを次のように変更すると、java.util.HashMapがSerializableを実装していても同じ例外が発生します。

java.util.Map nextUrl = new java.util.HashMap()

nextUrl.put("controller", controllerName)
nextUrl.put("action", actionName)
nextUrl.put("params", params)
session.setAttribute("nextUrl", nextUrl) 

また、セッションのget/setが正常に機能していることもわかります。

この問題を解決するにはどうすればよいですか。

よろしくお願いします、Prashant

4

1 に答える 1

5

問題は、コントローラーにパラメーターを保持するparamsマップ型 ( ) がインターフェイスを実装していないため、例外が発生することです。ソリューション専用の新しいハッシュマップを作成し、そこにすべてのパラメーターをコピーして、それをセッションに保存する必要があると考えています。GrailsParameterMapSerializableparamsHashMap

// this is my pseudocode - haven't been doing groovy and java for long time
java.util.Map paramMap = new java.util.HashMap() // copy params here

foreach(p in params)
{
  paramMap.put(p.Key, p.Value)
}

java.util.Map nextUrl = new java.util.HashMap()

nextUrl.put("controller", controllerName)
nextUrl.put("action", actionName)
nextUrl.put("params", paraMap) // <- note paramMap, not params!

session.setAttribute("nextUrl", nextUrl)
于 2012-05-28T10:00:42.690 に答える