4

在我的域类com.example.users.User中,我添加了临时字段证:

class User implements Serializable {
    ...
    def carnets

    static transients = ['springSecurityService', 'carnets']
    ...
}

在我的 gson 视图中user/_user.gson我想渲染它:

import com.example.users.User

model {
    User user
}

json g.render(user, [excludes:['password', 'deleted', 'enabled', 'accountExpired', 'accountLocked', 'passwordExpired', 'authorities']]) {
    //"carnets" g.render(template:"/carnet/index", collection: user.carnets, var:'carnets')
    "carnets" tmpl.'/carnet/index'(user.carnets)
}

但我收到了:

原因:grails.views.ViewRenderException:错误渲染视图:找不到名称/carnet/index的模板

Carnet 的视图 gson 文件是自动生成的,并且在从 CarnetController 执行时可以正常工作。

我错过了什么?

4

2 回答 2

7

在我的用例(Grails 3.3.0)中,我必须将模板路径从:更改 tmpl.'message/message' 为:( tmpl.'/message/message' 添加前导斜杠)。

使用该../语法在开发中有效,但在将 WAR 文件部署到 Tomcat 时对我造成了错误。见:[ https://github.com/grails/grails-views/issues/140]

于 2017-10-06T19:14:17.487 回答
1

.gson不幸的是,您需要使用当前文件中模板的相对路径。我想该选项将是该views文件夹的相对路径,但显然并非如此。

假设您的views文件夹结构如下:

views/
    carnet/
         _index.gson
    user/
        _user.gson

在这种情况下,您的_user.gson文件需要如下所示:

import com.example.users.User

model {
    User user
}

json g.render(user, [excludes:['password', 'deleted', 'enabled', 'accountExpired', 'accountLocked', 'passwordExpired', 'authorities']]) {
    "carnets" tmpl.'../carnet/index'(user.carnets)
}

TL;DR 更改tmpl.'/carnet/index'tmpl.'../carnet/index'. :)

于 2017-08-01T19:09:37.453 回答