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