0

私は現在、ブログのように使用したいWebサイト(Spring MVCを使用)を開発しており、さまざまなことについて投稿しています。また、公開したばかりの新しいチュートリアルに関する投稿に、このチュートリアル (Spring コントローラーをスローする) を含む JSP ページにリダイレクトするリンクを含めることも望んでいます。さらに、これらのチュートリアルのそれぞれにコメントがある場合があります。

これらの投稿にリンクされた Post オブジェクトと Comments オブジェクトを含むデータベースを作成しました。対応する tuto ページに特定の投稿に関するコメントを表示したい場合、最も簡単な方法は、Post オブジェクトに「pageAddress」属性を与えることです。この属性には、コントローラー メソッドのアドレスが含まれ、その JSP ページにリダイレクトされます。 tuto にコメントを付けて表示します。

問題は、この方法を使用すると、".../posts/id_of_the_post" のような URL を使用せざるを得なくなることです。これは、tuto アドレスには適していません。ネット上では、「.../tutos/name_of_the_tutorial」のようなアドレスが常に表示されます。

2番目のオプションは、「.../tutos/name_of_the_tutorial」のようなURLを使用することですが、対応する投稿がわからないため、直接アドレスが検索エンジンをスローする可能性がある場合、コメントは関連付けられません.

私の問題を理解していますか?私はそれをあまりうまく説明していないことを知っています。

ためらわずに私に解決策を提案してください。データベースまたはプロセスの任意の部分を変更できます。

ありがとうございました

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>

「Post」エンティティに「turorial」フィールドを持ちたくない場合は、一方向の OneToOne 関係を作成し、「Tutorial」オブジェクトに「post」フィールドのみを含めることができます。この場合、コントローラーで:

@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 に答える