tags:

views:

1427

answers:

2

I'm looking for the way to populate a JSP dropdown. I want that when the JSP loads it fills the dropdown with the info that I have in a database table.

I'm including the code of my class that will create the array and fill it with the database info. What I don't know is how to call that class from my JSP and fill the dropdown.

// this will create my array 
public static ArrayList<DropDownBrands> getBrandsMakes() {
    ArrayList<DropDownBrands> arrayBrandsMake = new ArrayList<DropDownBrands>();
    while (rs.next()) {     
        arrayBrandsMake.add(loadOB(rs)); // CARGO MI ARREGLO CON UN OBJETO
    }
    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;
}
A: 

First, in your JSP import the class you are trying to use:

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

Then you can use that class as you would normally do:

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

To fill the control, you iterate your array and set the value argument of the option tag:

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

As you can see, there's mixed Java code and HTML. First it outputs the select tag, then on Java code there's a while loop iterating a list of objects. This could be your ResultSet, an array or some other collection. For each iteration it creates an option tag with some value, this would be the value you want the user to see.

This is the basic approach, using only JSP. But there are many tag libraries, for example JSTL, that provide things like iteration so you can write things like:

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

Cesar
+1  A: 

I would suggest trying to stay away from mixing the display and model code. Keep all of your html in the jsp page and create model backing objects that provide the information you need. For example, let's say you have a simple Java class that has a list of objects:

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

It doesn't matter how the getItems method constructs the list that it is returning. To display these items in the JSP Page using JSTL you would do the following:

<%@ 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"&gt;
<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>

Instead of using useBean the items collection used in the forEach loop could also come from the session or a request object.

This link also has good advice: http://java.sun.com/developer/technicalArticles/javaserverpages/servlets_jsp/

Casey
and how i can show the value choosen by the user when the form is load, lets said that the user choose option 2, and i search for a record, how when it load i make to display the option selected by the user, i know how to do this when the value hard coded in the drop down value.
Cano63
Just compare with the current item inside the loop and print `selected` accordingly?
BalusC
This is what i do when the dropdown option are hard coded, how it will be with the database option <c:forEach var="item" items="${obj.items}"> <option>${item}</option> </c:forEach><option value="Additional"<%= auto.getCustomerData2().equalsIgnoreCase("Additional")?" selected":""%>>Additional</option>
Cano63
i try something like this but give an error that cannot convert a string to bolean<c:forEach var="item" items="${DropDB.brands}"><option value="${item}" <%= auto.getCustomerData2()?" selected":""%>>${item}</option></c:forEach>
Cano63
I am assuming that auto.getCustomerData2() is returning a string? It doesn't know how to evaluate that to True or False. You should take a look at the JSTL string functions (http://java.sun.com/products/jsp/jstl/1.1/docs/tlddocs/fn/tld-summary.html). You could than do something like fn:length(auto.getCustomerData2()) > 0 ? "selected" : "". Or add another method to your class that returns a boolean, like auto.hasCustomerData2() ?
Casey