san*_*vi7 6 grails grails-orm grails-plugin grails-2.0
我有一个域名,在该域名中有超过25个成员.该成员价值将来自一种形式.但是填补那些太多的领域感觉很糟糕.所以我认为将输入形式划分为不同的阶段.
我创建了一个名为FormObject的类,它包含所有输入所需的字段.问题是无法在页面之间传递此对象.
我想也许一个带有会话范围的服务可以让我保持对FormObject的引用,只需从服务中调用一个方法再次获取它.
<g:set var="formService" value="${new FormService()}" />
class FormService{
static transactional = false
static scope = "session"
FormObject myObject = new FormObject()
def resetForm(){
myObject=new FormObject()
}
def getForm(){
return myObject
}
}
Run Code Online (Sandbox Code Playgroud)
并将其用于GSP中
<g:set var="myForm" value="${formService.getForm()}" />
Run Code Online (Sandbox Code Playgroud)
但是,页面之间的数据不会持续存在.
如果我将myObject属性定义为static,它会持续存在,但我担心当它生成时,myObject将在所有用户之间共享.
任何人都可以确认如果我让它静止会发生什么?每个会话都有一个静态表单对象,还是只有一个静态表单对象?
我得到了解决方案......
第一种方法很接近,只是您要创建一个新实例而不是将其作为 Spring bean 获取,因此它的会话范围这一事实并没有发挥作用。一般来说,如果您的工作流程跨越两个以上页面,您应该考虑 WebFlow,但这可能是一个比您需要的更大的解决方案。
我会跳过服务包装器并将对象存储在会话中。这里的风险是,如果发生某些事情并且您不删除它们,您最终可能会用对象污染您的会话,因此您应该处理这个问题。
在第一个控制器操作中,确保该对象存在:
def action1 = {
... regular work
session.formObject = new FormObject()
// return model, e.g.
[foo: bar]
}
Run Code Online (Sandbox Code Playgroud)
在普惠制中你可以参考它
${session.formObject}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
442 次 |
| 最近记录: |