4

在我在 tomcat 上运行并在应用程序服务器之间进行会话复制的 grails 应用程序中,当我按如下方式在 http 会话中保存地图时,出现异常 GrailsParameterMap is not Serializable -

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) 

我还可以看到会话中的获取/设置工作正常。

我该如何解决这个问题。

在此先感谢,普拉尚特

4

1 回答 1

5

问题是在控制器中保存参数的params映射类型(GrailsParameterMap)没有实现Serializable接口,这就是你得到异常的原因。我现在想到的解决方案要求您专门为创建一个新的哈希图params并在那里复制所有参数并将其保存HashMap到会话中,例如:

// 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 回答