2012-05-28 23 views
3

序列化在我的Grails应用程序在Tomcat与应用服务器之间的到位会话复制运行,当我保存在HTTP会话中的图如下,我得到了一个例外GrailsParameterMap无法序列化 -GrailsParameterMap不是Grails的

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

的问题是,params地图类型(GrailsParameterMap)持有控制器参数没有实现Serializable界面,这就是为什么你会得到异常。解决方案我现在想要求你创建一个新的HashMap专门为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) 
+0

那是一个伟大的答案。谢谢 – user1180463

+0

我们也可以像 - params一样编写java.util.HashMap – user1180463