# Darstellung einer Tabelle mit JSP



## Fu (9. Mai 2008)

Hallo,

ich habe ein Problem mit der Darstellung einer Tabelle.
Was ich zur Zeit habe:

Servlet – DB-Abfrage


```
public class Namensuebersicht extends HttpServlet{

	public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{
		
		Statement st = null;
		ResultSet result = null;
		
		ArrayList<HashMap<String, String>> daten = new ArrayList<HashMap<String, String>>();
		response.setContentType("text/html");
		
		//Verbindung zur Datenbank
		Connection connection = new Verbindung().getConnection();
		
		try {
			st = connection.createStatement();
			result = st.executeQuery("select Name from Personen order by Name");
			
			ResultSetMetaData meta = result.getMetaData();
			int col = meta.getColumnCount();
			
			while(result.next()){		
				  HashMap<String, String> map = new HashMap<String, String>();
				  for (int i = 0; i < col; i++) {
				  	int c = i + 1;
				  	map.put(meta.getColumnName(c), result.getString(c));
				  }
			      daten.add(map);
			}

			result.close();
			st.close();
			connection.close();

			request.setAttribute("Namen", daten);
			RequestDispatcher view = request.getRequestDispatcher("Ausgabe.jsp");
			view.forward(request, response);
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}	
}
```

JSP - Ausgabe der Daten


```
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<html>
<body>

<h1>Namen</h1>

<table border="1">
	<tr>
		<th>A</th>
	</tr>
	
	<tr>
	<c:forEach var="row" items="${Namen}" >
		<c:choose>
			<c:when test="${fn:substring(row.NAME, 0, 1) == 'A'}">
<td>${row.NAME}</td>
			</c:when>
		</c:choose>
	</c:forEach>
	</tr>
</table>

</body>
</html>
```

Hier werden alle Namen ausgegeben, die mit dem Buchstaben A anfangen. Das funktioniert auch soweit ganz gut. Die Ausgabe sieht dann so aus:

A
Name1 | Name2 | Name3 | Name4 | Name5 | Name6 | …

Die Namen werden alle in einer Zeile ausgegeben. Bei sehr vielen Namen ist das natürlich nicht schön. Ich würde gerne nach jedem dritten Namen in eine neue Zeile springen:

A
Name1 | Name2 | Name3
Name4 | Name5 | Name6

Hat jemand eine Idee, wie man sowas realisieren könnte? Ich wäre für jeden Lösungsansatz dankbar.

P.S.: Das ist mein erstes Projekt mit Servlets/JSP. Für allgemeine Verbesserungsvorschläge bin ich sehr dankbar.


----------



## maki (9. Mai 2008)

Erstmal Glückwunsch, obwohl es dein erstes Servlet/JSP Projekt ist, machst du es richtig und nutzt fleissig die JSTL und EL!

Mit 2 ineinander geschachtelten Schleifen könnte es gehen.


----------



## Fu (13. Mai 2008)

Vielen Dank für die schnelle Antwort!
Ich werde es mal mit ineinander geschachtelten Schleifen versuchen. 
Kanns mir noch nicht wirklich vorstellen, wie ich das machen soll...Aber vielleicht kommt mir noch die Erleuchtung. Ist ja noch früh am Tag  :wink: 
LG


----------



## Ralf Ueberfuhr (14. Mai 2008)

EDIT: Kommentar gelöscht


----------



## Ralf Ueberfuhr (14. Mai 2008)

Ein anderer Tip: Verwende per <c:set /> eine Zählvariable, und wenn die %3 == 2 ist, dann füge einen Zeilenumbruch ein.

Ungefähr so:

```
<c:set var="counter" value="${0} />
<c:forEach...>
  <c:set var="counter" value="${counter+1} />
  <c:if test="${2 == counter%3}">
    ...
  </c:if>
</c:forEach>
```


----------

