呈现视图,但gsp中没有对象

时间:2019-02-12 15:26:45

标签: grails render gsp

我尝试渲染一个视图,该视图工作正常,但似乎并没有获得传递给它的模型对象。我不知道原因,因为根据所有手册和示例,这应该非常简单。

模型对象

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

关于我错过了哪些基本知识的任何想法?

1 个答案:

答案 0 :(得分: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请求参数,而不是调用域类   创建新实例的构造方法将调用static   域类上的get方法,id参数的值将   作为参数传递。

然后...

  

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