0

JSPを実践するためのオンライン図書注文システムのダミープロジェクトを作成しようとしています。その中でMVCをフォローしようとしています。

定義上、MVCでは、モデルを変更してもView/Controllerを変更する必要はありません。

モデルでは、Customerクラス(顧客属性とそのゲッターセッターを持つ)とCustomerCollectionクラス(顧客データに対してCRUDを実行する)を作成しました。

Controllerには、CustomerCollectionを呼び出し、Customerデータにアクセスし、要求の属性として顧客のリストを追加するControllerサーブレットがあります。

ビューでは、コントローラーによって追加されたカストエマーのリストにアクセスし、次のようにページに表示するJSPがあります。

<table id="customerTable">
                <tr id="customerTableHeaderRow">
                    <th>Id</th>
                    <th>First name</th>
                    <th>Last name</th>
                    <th>Address</th>
                    <th>Phone number</th>
                    <th>Gender</th>
                </tr>
                <%                  
                    for(Customer customer: customers)                        
                    {  
                %>
                <tr class="customerTableRow">
                    <td><%= customer.getId() %></td>
                    <td><%= customer.getFirstName() %></td>
                    <td><%= customer.getLastName() %></td>
                    <td><%= customer.getAddress() %></td>
                    <td><%= customer.getPhoneNumber() %></td>
                    <td><%= customer.getGender() %></td>                    
                </tr>   
                <%      
                    }
                %>
 </table>

ただし、customersテーブルに列を追加するなど、データベースに変更を加える場合は、その列のコンテンツも表示するようにforループを変更する必要があると思います。これは適切ではありません。

では、ここで何が問題になっていますか?間違っていますか?または、同じことを行うための標準的な方法はありますか?

4

1 に答える 1

0

MVCアプローチでは、JSPファイルにJavaコードの行を含めないでください。JSTLを使用し、サーブレットクラスにJDBCコードを含めないでください。DAOを使用する必要があります。つまり、基本的には正しく実装しているので、以下のようにいくつかの変更を加える必要があります。

命名規則により、CustomerCollectionはCustomerDAOになります。スクリプトレットをJSTLおよびELに置き換えます。

jspのカスタムには、次のようにアクセスできます。

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<table>
<c:forEach items="${customers}" var="customer">
    <tr>
        <td>${customer.firstName}</td> - access all your attributes this way
    </tr>
</c:forEach>
</table>
于 2013-01-23T08:08:52.563 に答える