Loops 如何使用<;g:每个>;标签

Loops 如何使用<;g:每个>;标签,loops,grails,blogs,each,Loops,Grails,Blogs,Each,我在grails的博客中工作,我创建了一个名为Post的域类,其中我定义了属性String content、Date Date、String title,由于一篇文章可以有多条评论,我还创建了一个域类“Comment”,其中包括:String author、File avatar、String content、Date commentDate

我在grails的博客中工作,我创建了一个名为
Post
的域类,其中我定义了属性
String content、Date Date、String title
,由于一篇文章可以有多条评论,我还创建了一个域类
“Comment”,其中包括:String author、File avatar、String content、Date commentDatestatic hasmany=[statements:Comment]
在Post-domain类中。然后,在blog.gsp中,我想显示一篇包含所有评论的文章,因此我尝试使用带有一篇文章的
标记作为变量,其思想是该标记遍历这篇文章的评论列表,而不是遍历所有的文章。如何实现这一点?

如果在Grails中使用自动绑定功能,请确保类中的命名和层次结构与HTML匹配

debug是您最好的朋友在这种情况下,在服务器上执行操作时,打印出收到的请求数据

另一个注意事项,在处理自动绑定器时,有时,即使您的类中的数据类型被定义为列表,如果该列表中的一个元素从客户端检索,您将注意到GRAIRS不会将其视为列表。

例如

referring to your design, 
Post
{
 hasmany = [statements: Comment]
}
如果在这篇文章中找到一条评论,那么语句的类型将是comment,而不是comment[] 我曾多次遇到过这种情况,也许这与我使用的grails版本有关,但值得检查,在这种情况下,debug是您的朋友

我将使用“标准”grails变量名以避免混淆

如果您的控制器发回一个
Post
对象,您可以这样迭代:

//PostController.groovy
def blog() {
    def postInstance = Post.read(params.id)
    [postInstance: postInstance]
}

//blog.gsp
${postInstance.title} //just to make sure your postInstance is correctly populated
<g:each in="${postInstance?.statements}" var="commentInstance">
    ${commentInstance.content}
<g:each>
您可能希望
注释属于
帖子

//Comment.groovy
static belongsTo = [post : Post]

这使它成为了一种双向关系。

我在我的PostController:def blog()中有这个操作{def entries=Post.findAll()def Post=Post.get(params.id)[Post:Post,articles:entries]}正如您应该看到的,我已经定义了一个名为articles的Post对象,所以我试图跟随您所做的是:${commentInstance.content}而且它不起作用!谢谢你从管理员那里发送回来的是一个所有
帖子的列表和一个带有传入id的
帖子的列表。gsp中的“文章”是一个所有
帖子的列表
,我想你要做的是获取所有帖子,然后显示它们以及每个帖子的所有评论
Post
。对吗?我会更新我的答案。记住,我不需要重复所有的帖子,只需要再次通过Post-comments更新答案。抱歉-这有点混乱,因为您将所有
帖子
作为
文章
变量发回。只需发回一个
Post
变量即可谢谢,我明白了,虽然我的代码有点不同,因为我把当前的帖子当作一个常量:${articles[k.toInteger()].statements},其中k是我之前在同一个gsp中定义的帖子的id值。再次非常感谢
//Comment.groovy
static belongsTo = [post : Post]