У вас это почти правильно. Чтобы получить раскрывающиеся значения из базы данных, вы должны сначала вызвать сервлет, который выполняет задание предварительной обработки, а затем позволить сервлету отобразить JSP с раскрывающимся списком.
Поскольку обычный HTTP-запрос (нажатие на ссылку, закладку или ввод URL-адреса в адресной строке) по определению запускает GET-запрос, вы должны выполнить эту работу в методе doGet()
. Вот пример, который получает выпадающие значения в виде List<Product>
.
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
List<Product> products = productService.list();
request.setAttribute("products", products); // It'll be available as ${products}.
request.getRequestDispatcher("/WEB-INF/products.jsp").forward(request, response);
}
В /WEB-INF/products.jsp
вы можете отобразить его следующим образом:
<form action="order" method="post">
<select name="productId">
<c:forEach items="${products}" var="product">
<option value="${product.id}">${product.name}</option>
</c:forEach>
</select>
<input type="submit" value="Order" />
</form>
Сопоставьте этот сервлет с шаблоном URL-адреса /products
и вызовите его с помощью http://example.com/context/products.. Он загрузит продукты из БД, сохранит их в области запроса, перенаправит в JSP, чтобы позволить ему представить его .
Когда вы отправляете форму, будет вызван метод doPost()
сервлета, который сопоставлен с шаблоном URL /order
. Когда вы отправляете HTML-форму, пара name=value
каждого элемента ввода будет доступна в качестве параметра HTTP-запроса. Таким образом, вы можете получить идентификатор продукта следующим образом:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String productId = request.getParameter("productId");
// ... do your job here to insert the data.
request.getRequestDispatcher("/WEB-INF/someresult.jsp").forward(request, response);
}
Смотри также: