0

我在一个使用 grails 的博客中工作,问题是我创建了一个名为 的域类Post,我在其中定义为属性String content, Date date, String title,并且由于帖子可以有多个评论,我还创建了一个域类"Comment" with: String author, File avatar, String content, Date commentDate;,因此我声明了一对多关系如下:static hasmany = [statements: Comment]在 Post 域类中。然后在 blog.gsp 中我想显示一个包含所有评论的帖子,所以我尝试使用< g:each >带有帖子的标签作为变量,这个想法是这个标签来遍历这个单曲的评论列表帖子,而不是通过所有帖子。如何做到这一点?

4

2 回答 2

1

我将使用“标准”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>

无论有 1 条语句还是 1000 条语句,这都应该有效。

还要确保它是

//Post.groovy
static hasMany = [statements: Comment]

您可能希望拥有Comment属于Post

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

这使其成为双向关系。

于 2013-05-29T06:56:59.140 回答
0

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

在这种情况下,调试是你最好的朋友,在你的服务器上的操作上,打印出接收到的请求数据。

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

例子,

referring to your design, 
Post
{
 hasmany = [statements: Comment]
}

如果在这篇文章中发现一条评论,语句将是Comment类型,而不是Comment[] 我多次遇到这种情况,也许这与我使用的 grails 版本有关,但值得检查,在这种情况下再次调试是你的朋友

于 2013-05-29T05:19:16.510 回答