渲染视图,但gsp中没有对象

问题描述 投票:0回答:1

我尝试渲染一个视图,它工作正常,但它似乎没有得到我传递给它的模型对象。我无法弄清楚原因,因为根据所有手册和示例,这应该是非常简单的。

模型对象

class Race {

    def distance = "1/4 mile"
    def racer1
    def racer2
}

RaceController在这里呈现

def doFullRace(Race race) {

            render (view: 'raceProgress', model: [race: race])
        }

raceProgress.gsp应该足够容易地显示它

    <html>
    <body>
        <div id="raceStart" align="center">
...
            <p>${race.racer1} is racing ${race.distance} against ${race.racer2}</p>
        </div>
    </body>
    </html>

但我反而得到这个object not found

我错过了什么基本的想法?

grails render gsp
1个回答
1
投票

你有以下几点:

def doFullRace(Race race) {
    render (view: 'raceProgress', model: [race: race])
}

race成为null的方法之一是如果以下所有都是真的:

  • Race是一个域类
  • 提交给doFullRace的请求包括一个名为id的请求参数
  • 数据库中没有与id匹配的params.id的记录

来自http://docs.grails.org/3.3.9/guide/theWebLayer.html#commandObjects ......

如果命令对象的类型是域类的类型并且有一个id请求参数,那么不是调用域类构造函数来创建新实例,而是调用域类上的静态get方法和值的类。 id参数将作为参数传递。

和...

如果命令对象的类型是域类,并且没有id请求参数或者有一个id请求参数且其值为空,那么null将被传递到控制器操作,除非HTTP请求方法是“POST”,在这种情况下将通过调用域类构造函数创建域类的新实例。对于域类实例为非null的所有情况,仅在HTTP请求方法为“POST”,“PUT”或“PATCH”时才执行数据绑定。

© www.soinside.com 2019 - 2024. All rights reserved.