2012-03-29 6 views
1

私はServlets/JSP/MVCを学んでおり、簡単なアプリケーションの設計について質問があります。私は人々が製品に投票できるサイトを持っています。アプリケーション・コンテキストでJavaサーブレットのセッションなど

  • 私は、製品のArrayListのを持っている(モデルクラスが製品と呼ばれている)

  • 私はすべての製品(コンテキストからリストを読み込み、に属性として転送を描くホームサーブレットを持っていますJSP)。項目はJSTLを使用して引き出されます。

  • プロダクトを表示するときに呼び出すことができるProductRateという別のサーブレットがあります。 doPost()はユーザーが製品(フォームで指定)に与えたレーティングを記録し、これをセッションに保存することになっています。

は、私は(アプリケーション・コンテキストに格納されている)製品情報だけでなく、それに与えられたように、ユーザーこと任意の投票だけでなくを表示するようにホームサーブレットの情報に参加できるようにしたいです。価値がない場合は、「あなたのXの投票に感謝します」などの言葉は表示されません。

"userRating"などと呼ばれる商品モデルクラスにフィールドを追加する必要があります。ホームサーブレットのリストを読むときは、そのフィールド値を調べ、投票値を「userRating」モデルに割り当てます値?

実際には、アプリケーションで常に使用されるオブジェクトの固定リストがありますが、JSPでそれらを描画するときは、セッションに格納されている情報(投票値)と結婚してモデルを処理するためのきれいな方法が必要ですあなたのPOSTサーブレット/コントローラで

<c:forEach items="${products}" var="product"> 
    <h2>${product.name}</h2> 
    ${product.description} <br/> 
    <c:choose> 
     <c:when test="${not empty ratings[product.id]}"> 
      ${ratings[product.id].stars} <br/> 
      ${ratings[product.id].comments} <br/> 
     </c:when> 
     <c:otherwise> 
      You have not rated this product 
     </c:otherwise> 
    </c:choose> 
</c:forEach> 

:JSPであなたがキーとしてプロダクトIDをセッションにマップでランキングを格納することができ、その後、JSPは次のよ​​うになりますそよ風

答えて

2

です:

Map<Long,Rating> ratings = new HashMap<Long,Rating>(); 
ratings.put(product.getId(),new Rating(1,"I think it's really bad..")); 
session.setAttribute("ratings",ratings); 

ウェブアプリでユーザーの評価を維持したり、すべての製品を管理したい場合は、設定ファイルとセッションにデータを格納するのではなく、データベースを使用します。次のデータベーステーブルを考えてみましょう:

製品:ID、説明など。
評価:ID、星、コメント、PRODUCTID、userIdを
ユーザー:などのID、名前、電子メール、 ..

データベースに接続する場合は、HibernateなどのORMツールを使用して、テーブルをオブジェクトにマップします。その後休止状態で、あなたは、製品を照会し、あなたが作業するためのオブジェクト形式で、それに関連するすべての情報を得るでしょう

public class Product { 
    Long id; 
    String description; 
    Set<Rating> ratings; 
} 
public class Rating{ 
    Long id; 
    Integer stars; 
    String comments; 
    User user; 
    Product product; 
} 
public class User { 
    ... 
} 

:上記の表に対応したあなたのオブジェクトは次のようになります。ビューに必要な情報を渡すことができます。もちろん、休止状態を設定するために必要な設定がいくつかあります。

あなたはMVCについて言及しました。 MVCフレームワークを使用していますか?私はSpring MVCまたはStrutsを調べます。それはあなたのアプリの層を分離するのに役立ちます。

あなたが言った流れは正しいようです。サーブレット/コントローラはGETリクエストをメインページに処理します。データベースからの投票とともに、すべての製品(または仕様)を取得します。それらをパラメータとして設定します。 JSPはJSTLを使用してコンテンツを表示します。

は、お楽しみに!

+0

徹底的な回答ありがとうございます...私は特定のMVCフレームワークを現在使用していません、ただのサーブレット/ JSPなどです。 – xingyu

関連する問題