Заполните раскрывающийся список JSP с информацией базы данных - PullRequest
9 голосов
/ 25 мая 2010

Я пытаюсь заполнить раскрывающийся список JSP из таблицы базы данных.

Вот код, который создаст массив и заполнит его информацией базы данных:

// this will create my array 
public static ArrayList<DropDownBrands> getBrandsMakes() {
    ArrayList<DropDownBrands> arrayBrandsMake = new ArrayList<DropDownBrands>();
    while (rs.next()) {     
        arrayBrandsMake.add(loadOB(rs));
    }
    return arrayBrandsMake;
}

// this will load my array object
private static DropDownBrands loadOB(ResultSet rs) throws SQLException {
    DropDownBrands  OB = new DropDownBrands();
    OB.setBrands("BRAN");
    return OB;
}

Как мне вызвать этот класс из моего JSP и заполнить раскрывающийся список?

Ответы [ 2 ]

11 голосов
/ 25 мая 2010

Я бы посоветовал стараться не смешивать дисплей и код модели. Сохраните все свои html на странице jsp и создайте вспомогательные объекты модели, которые предоставляют необходимую информацию. Например, допустим, у вас есть простой Java-класс со списком объектов:

package com.example;

import java.util.ArrayList;
import java.util.List;

public class ListBean {

    public List<String> getItems() {
        List<String> list = new ArrayList<String>();
        list.add("Thing1");
        list.add("Thing2");
        list.add("Thing3");
        return list;
    }
}

Неважно, как метод getItems создает список, который он возвращает. Чтобы отобразить эти элементы на странице JSP с использованием JSTL, вы должны сделать следующее:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"     
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>

<jsp:useBean id="obj" class="com.example.ListBean" scope="page"/>

<select>
    <c:forEach var="item" items="${obj.items}">
     <option>${item}</option>
    </c:forEach>
</select>
</body>
</html>

Вместо использования useBean коллекция элементов, используемая в цикле forEach, может также исходить из сеанса или объекта запроса.

У этой ссылки также есть хороший совет: http://java.sun.com/developer/technicalArticles/javaserverpages/servlets_jsp/

2 голосов
/ 25 мая 2010

Во-первых, в вашем импорте JSP вы пытаетесь использовать класс:

<%@ page import="com.mypackage.MyClass" %>

Тогда вы можете использовать этот класс, как обычно:

<%
    MyClass c = new MyClass();
    c.getSomeProperty();
%>

Чтобы заполнить элемент управления, вы перебираете свой массив и устанавливаете аргумент значения тега option:

<select>
    <%while (myList.next()){%>
        <option><%out.print(c.getName());%></option>
    <%}%>
</select>

Как видите, смешанный код Java и HTML. Сначала он выводит тег select, затем в коде Java есть цикл while, повторяющий список объектов. Это может быть ваш ResultSet, массив или другая коллекция. Для каждой итерации создается тег опции с некоторым значением, это будет значение, которое вы хотите, чтобы пользователь увидел.

Это базовый подход, использующий только JSP. Но есть много библиотек тегов, например, JSTL, которые предоставляют такие вещи, как итерация, поэтому вы можете писать такие вещи как:

<select name="mySelect">
    <foreach collection="<%= myCollection %>" var="mybean">
        <%= mybean.getOptionTag() %>
    </foreach>
</select>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...