2010-05-25 12 views
9

Sto tentando di compilare un elenco a discesa JSP da una tabella di database.Popolamento del menu a discesa JSP con informazioni sul database

Ecco il codice che creerà l'array e riempirlo con le informazioni del database:

// 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; 
} 

Come chiamare quella classe dalla mia JSP e popolare la discesa?

risposta

10

vorrei suggerire cercando di stare lontano dalla miscelazione del codice di visualizzazione e il modello. Mantieni tutto il codice html nella pagina jsp e crea gli oggetti di backup del modello che forniscono le informazioni necessarie. Ad esempio, supponiamo che abbiate una semplice classe Java che ha una lista di oggetti:

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; 
    } 
} 

Non importa come il metodo getItems costruisce la lista che sta tornando. Per visualizzare questi elementi nella pagina JSP usando JSTL si dovrebbe effettuare le seguenti operazioni:

<%@ 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> 

Invece di usare useBean l'insieme di elementi utilizzato nel ciclo foreach potrebbe anche provenire dalla sessione o un oggetto di richiesta.

Questo legame ha anche un buon consiglio: http://java.sun.com/developer/technicalArticles/javaserverpages/servlets_jsp/

+0

e come posso mostrare il valore scelto dall'utente quando il modulo è carico, consente di dire che l'utente sceglie l'opzione 2, e cerco un record, come quando si carica faccio vedere l'opzione selezionata dall'utente, so come farlo quando il valore è codificato nel valore di drop down. – Cano63

+0

Basta confrontare con l'elemento corrente all'interno del ciclo e stampare 'selected' di conseguenza? – BalusC

+0

Questo è quello che faccio quando l'opzione del menu a discesa è codificata, come sarà con l'opzione database Cano63

2

In primo luogo, nel vostro JSP importazione la classe che si sta tentando di utilizzare:

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

quindi è possibile utilizzare questa classe, come si farebbe normalmente:

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

Per riempire il controllo, è itera l'array e imposta l'argomento value del tag opzione:

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

Come puoi vedere, c'è un codice Java misto e HTML. Prima emette il tag select, quindi sul codice Java c'è un ciclo while che itera un elenco di oggetti. Questo potrebbe essere il tuo ResultSet, un array o un'altra raccolta. Per ogni iterazione crea un tag opzione con un certo valore, questo sarebbe il valore che l'utente deve vedere.

Questo è l'approccio di base, utilizzando solo JSP. Ma ci sono molte librerie di tag, per esempio JSTL, che forniscono le cose come iterazione in modo da poter scrivere le cose come:

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

Problemi correlati