首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Grails将对象再次传递给视图并返回。

Grails将对象再次传递给视图并返回。
EN

Stack Overflow用户
提问于 2015-01-18 20:15:56
回答 1查看 2.3K关注 0票数 2

我有一些数据,我需要通过我的Grails应用程序中的多个操作来坚持。由于数据的性质,我宁愿不将数据存储在会话中。以下是我想要做的事情的一个例子。

代码语言:javascript
运行
复制
class MyController{
  def index(){
    MyObject object = MyObject.new(params.first, params.second, params.third)
    [gspObject:object]
  }

  def process(){
    MyObject object = params.gspObject
    //continue from here
  }
}

在我的普惠制中

代码语言:javascript
运行
复制
<g:form action="process" params="[gspObject:gspObject]">

那么我就得到了错误

代码语言:javascript
运行
复制
Cannot cast object 'net.package.MyObject@699c14d8' with class 'java.lang.String' to class 'net.package.MyObject'

我的问题是,如果我想要拿回我发送给普惠制的对象,我怎么能得到它?我是否可以将对象保存在比会话更安全的范围内?是否有方法将对象传递到页面本身并在下一个请求中将其传回?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-18 21:25:38

Grails有很多层,但是在底层您有一个普通的旧HTTP,就像在任何web应用程序中一样。这是一种无状态协议,您发送文本或二进制响应,并接收文本或文本+二进制请求。但是,您不能期望能够以HTML的形式将任意对象发送到web浏览器,然后以与发送时相同的状态再次接收它--这个Java/Groovy JVM对象将存储在浏览器中的何处?

你基本上有两个选择。一种是将其存储在服务器上,这是较少的工作,因为它始终作为相同的对象。会话是一个很好的位置,因为它是与用户耦合的,是按需创建的,并且可以自动超时并被删除等等。另一个是执行您想要做的事情--将它发送到客户端并接收回它--但是您必须从一个对象(它可能是一个包含任意多个其他对象的复杂对象)序列化它,并将它从客户机上使用的格式反序列化到Java/Groovy对象中。

JSON是序列化/编组的好选择。如果页面使用表单,则可以将字符串化的对象存储在隐藏的窗体元素中;如果单击此页到工作流中的下一个链接,则可以将其存储在查询字符串arg中。但是,不要发送对象的所有数据,只发送重建对象所需的数据。数据库中可用的任何内容都应该由id引用并重新加载。

有点像

代码语言:javascript
运行
复制
[gspObject: object as JSON]

代码语言:javascript
运行
复制
[gspObject: [first: object.first, first: object.firstsecond,  ...] as JSON]

将它以正确的格式发送,然后您可以从请求中解析JSON以恢复实例。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28014365

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档