【问题标题】:Conception of a blog/tuto website using spring使用 Spring 构建博客/教程网站
【发布时间】:2013-08-12 18:27:05
【问题描述】:

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

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

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

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

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

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

谢谢

【问题讨论】:

    标签: spring jsp web-applications spring-mvc url-rewriting


    【解决方案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.cmets} 访问帖子 cmets

    【讨论】:

    • 我明白你的意思。你的解决方案没问题,但我不打算有实体教程,只有一个 JSP 页面。但是,最终我可能不得不使用一个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多