【发布时间】:2011-04-14 20:13:06
【问题描述】:
我正在创建一个 Grails 应用程序,它有一个带有文本字段的输入页面。在这里,用户可以输入数据并在提交时,控制转到控制器中的操作。 这里我使用 params.empName 等获取表单数据的值。
但是这些数据的范围非常小,如果我从当前操作重定向到另一个操作,则不会继续。
有没有办法增加变量的范围?
我现在要将其转换为面向服务的架构。因此有没有办法在服务中访问这些数据?
请指教。
谢谢, 梅格
【问题讨论】:
我正在创建一个 Grails 应用程序,它有一个带有文本字段的输入页面。在这里,用户可以输入数据并在提交时,控制转到控制器中的操作。 这里我使用 params.empName 等获取表单数据的值。
但是这些数据的范围非常小,如果我从当前操作重定向到另一个操作,则不会继续。
有没有办法增加变量的范围?
我现在要将其转换为面向服务的架构。因此有没有办法在服务中访问这些数据?
请指教。
谢谢, 梅格
【问题讨论】:
我还将查看链接操作作为传递模型信息的一种方式
【讨论】:
我认为没有增加范围的内置方法。这可能是件好事。
如果您在控制器中进行重定向,您只需通过 redirect() params dynamic property 传递必要的参数。示例:
def formHandler = {
// do stuff with params
redirect(action: 'anotherAction', params: params)
}
如果您需要范围来跨越多个请求,例如如果您要为用户提供多步表单条目,您可能会考虑使用 web flows 在请求之间保持状态。
对于服务,最好将所需的参数作为参数传递给服务方法,而不是公开参数。示例(类似于访问服务部分here):
// service
def myServiceMethod(def foo, def bar) {
// do stuff
}
// controller
def myService
def myControllerAction {
myService.myServiceMethod(params.foo, params.bar)
}
将参数从控制器暴露给服务层会破坏 Grails 试图为您提供的面向层的方法;即(MVC 的)“模型”和“控制器”组件将更加紧密耦合。
【讨论】:
您可以添加...
params: params
...作为重定向的参数,以便传入参数与重定向一起发送。
【讨论】: