0

我正在尝试创建一个在线图书订购系统的虚拟项目来练习 JSP。我试图在其中遵循 MVC。

根据定义,在 MVC 中,模型中的任何更改都必须不需要视图/控制器中的任何更改。

在模型中,我创建了 Customer 类(具有客户属性及其 getter-setter)和 CustomerCollection 类(对客户数据执行 CRUD)

在 Controller 中,我有一个 Controller servlet,它调用 CustomerCollection、访问客户数据并将客户列表添加为请求的属性。

在视图中,我有 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>

但是现在我相信,当我对数据库进行任何更改时,例如向客户表中添加任何列,我必须修改 for 循环以显示该列的内容,这也不好。

那么这里有什么问题呢?做错了吗?还是有任何标准方法可以做到这一点

4

1 回答 1

0

在 MVC 方法中,JSP 文件不应包含任何 Java 代码行,您应该使用 JSTL,servlet 类不应包含任何 JDBC 代码,您应该使用 DAO。所以基本上你正在实施它,只需要做一些如下的改变。

按照命名约定,您的 CustomerCollection 应该是 CustomerDAO。用 JSTL 和 EL 替换 Scriptlet。

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 回答