0

我目前正在开发一个网站(使用 Spring MVC),我想像博客一样使用它,其中包含有关各种事物的帖子。我还希望关于我刚刚发布的新教程的帖子有一个链接,该链接重定向到包含这个教程的 JSP 页面(抛出一个 Spring 控制器)。此外,这些导师中的每一个都可能有一些评论。

我创建了一个数据库,其中包含链接到这些帖子的帖子对象和评论对象。如果我想在相应的教程页面上显示关于特定帖子的评论,最简单的方法是给 Post 对象一个“pageAddress”属性,该属性将包含将重定向到 JSP 页面的控制器方法的地址tuto 并给它显示的评论。

问题是,使用这种方法会迫使我使用像“.../posts/id_of_the_post”这样的 URL,而且对于 tuto 地址真的不好。在网上,您总是会看到类似“.../tutos/name_of_the_tutorial”的地址。

第二种选择是使用像“.../tutos/name_of_the_tutorial”这样的网址,但我不知道相应的帖子,所以如果直接地址会被搜索引擎发现,我不会有相关的评论。

你明白我的问题吗?我知道我没有很好地解释它。

不要犹豫,向我提出任何解决方案。我可以更改数据库或我的流程的任何部分。

谢谢

4

1 回答 1

1

在 Post 和 Tutorial 之间建立双向 OneToOne 关系。然后,当您的帖子中有“教程”字段时,您可以通过以下方式创建链接:

<c:set var="postLink" value="/posts/${post.id}" />
<c:if test="${not empty post.tutorial}">
   <c:set var="postLink" value="/tutorials/${post.tutorial.name}" />
</c:if>
<a href="${postLink}">${post.name}</a>

如果您不想在“帖子”实体中有“教程”字段,您可以建立单向 OneToOne 关系,并且在“教程”对象中只有“帖子”字段。在这种情况下,在您的控制器中:

@RequestMapping(value = "/posts/{postId}")
public Stirng showPost(@PathVariable Long postId) {
   Tutorial tuto = tutorialService.findByPostId(postId);
   if(tuto != null) {
      return "redirect:/tutorials/" + tuto.getName();
   }
   // fetching post object and return show post view
}

在“显示教程”视图中,您可以通过 ${tutorial.post.comments} 访问帖子评论

于 2013-08-11T15:09:10.967 回答