使用Forward传递模型

Luke Daley在自己的Blog上给出了利用forward传递模型的方法

class MyController {
    
    def first = {
        forward(action: 'second', model: [thing: "thing"])
    }
    
    def second = {
        assert request.thing == "thing"
        // go forth and do stuff
    }
    
}

在目标Action中访问forward中传递的模型使用request即可,模型中的每一项会作为request的属性被传递出去。因此上例中使用thing即可访问第一个Action传过来的Model.

这个技巧在文档上并没有提到,从文档中你只会看到forward和parameter结合使用的例子。当然,这个例子也可以利用chain来完成,只是访问传过来的model就要用chainModel了。关于chain的用法,请参见这篇文档速读

By foxgem - Posted on 08 六月 2010

使用forward(params)也可以

使用forward(action:second,params:[thing:'thing'])也可以 而且在second中可以使用更常用的params.thing获得参数,可以与正常请求统一

不错,但是类型只限于字符类型了吧。

不错,但是类型只限于字符类型了吧。想想params中类型的限制,呵呵。当然,利用params变通的传对象的方式就是,先转成json,然后再转换回来。不过,使用model就更直接了。

另一种方式就是chain了。

params中有类型的限制么?

params中有类型的限制么?想来似乎应该有,但没看到相关资料。

能给提供一下资料么?

所有从params参数出来的都是字符型

所有从params参数出来的都是字符型,它们都是url的一部分,自然不能是任意类型。而request的attribute中可以放任何东西,没有类型限制。

这是用Java开发Web应用的常识,可以去看看JSP相关的知识。