# Java code aus JSP-File durch JSTL code ersetzen



## wakoz (4. Apr 2010)

Hi

Ich versuche mich gerade an JSP und JSTL, eine Übungsaufgabe mit der ich mich beschäftigt ist das ich folgende und weitere JSP files überarbeite und Java code durch JSTL ersetze.


```
<?xml version="1.0" encoding="ISO-8859-1" ?>

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
	pageEncoding="ISO-8859-1" import="model.*"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>Katalog.jsp</title>
</head>
<body>

<%
	Katalog katalog = new Katalog();

	Warenkorb warenkorb = (Warenkorb) session
			.getAttribute("ware.warenkorb");
	if (warenkorb == null)
		warenkorb = new Warenkorb();

	Buch buch;
	final String ISBN = "isbn";
	final String PLUS = "plus";

	buch = katalog.getBuchInfo(request.getParameter(PLUS));

	if (buch != null)
		warenkorb.setWarenkorbElement(buch.getIsbn(), buch);
	session.setAttribute("ware.warenkorb", warenkorb);
%>

<%@ include file="/view/Banner.jsp"%>

<%
	if (buch != null) {
%>
<span style="font-size: 20px; font-weight: bold;"> Sie haben
folgendes Buch dem Warenkorb hinzugefügt:</span>
<br />
<span style="font-size: 20px; font-style: italic;"> <%
 	out.print(buch.getAutor());
 %>
- <%
 	out.print(buch.getBuch());
 %> </span>
<a href="<%out.print(response.encodeURL("Warenkorb"));%>">zum
Warenkorb &raquo;</a>
&nbsp;
<a href="<%out.print(response.encodeURL("Bestellen"));%>">Bücher
bestellen &rarr;</a>
<%
	}
%>

<table>
	<tr>
		<th colspan="3">B&uuml;cherliste</th>
	</tr>
	<%
		for (Buch katalogBuch : katalog.getAlleBuecher()) {
	%>
	<tr>
		<td>
		<%
			out.print(katalogBuch.getAutor());
		%>
		</td>
		<td><a
			href="<%out.print(response.encodeURL("Buch?" + ISBN + "="
						+ katalogBuch.getIsbn()));%>">
		<%
			out.print(katalogBuch.getBuch());
		%> </a></td>
		<td>
		<%
			out.print(katalogBuch.getPreis());
		%> &euro;</td>
		<td><a
			href="<%out.print(response.encodeURL("?" + PLUS + "="
						+ katalogBuch.getIsbn()));%>">
		Buch hinzuf&uuml;gen </a></td>
	</tr>
	<%
		}
	%>
</table>

<a href="<%out.print(response.encodeURL("Warenkorb"));%>">zum
Warenkorb &raquo;</a>

</body>
</html>
```

Die Schleifen oder If Statements sollten soweit kein Problem sein, hier im forum habe ich schon was passendes gefunden.
Aber folgendes verstehe ich noch nicht, bzw. verstehe ich nicht ob oder wie man dies in JSTL darstellen kann.

```
<%
	Katalog katalog = new Katalog();

	Warenkorb warenkorb = (Warenkorb) session
			.getAttribute("ware.warenkorb");
	if (warenkorb == null)
		warenkorb = new Warenkorb();

	Buch buch;
	final String ISBN = "isbn";
	final String PLUS = "plus";

	buch = katalog.getBuchInfo(request.getParameter(PLUS));

	if (buch != null)
		warenkorb.setWarenkorbElement(buch.getIsbn(), buch);
	session.setAttribute("ware.warenkorb", warenkorb);
%>
```


----------



## wakoz (5. Apr 2010)

Meine Frage ist wohl unpräzise 

Mich interessieren die beiden Strings so wie die Methoden aufrufe

```
<%
	Katalog katalog = new Katalog();

	Warenkorb warenkorb = (Warenkorb) session
			.getAttribute("ware.warenkorb");
	if (warenkorb == null)
		warenkorb = new Warenkorb();

	Buch buch;
	final String ISBN = "isbn";
	final String PLUS = "plus";

	buch = katalog.getBuchInfo(request.getParameter(PLUS));

	if (buch != null)
		warenkorb.setWarenkorbElement(buch.getIsbn(), buch);
	session.setAttribute("ware.warenkorb", warenkorb);
%>
```

Das Handling mit den beiden Strings ist mir unklar ich benötige diese um nicht überall Texte neu mit neuen Rechtsschreibfehlern erstellen zu müssen  besonders weil diese auch Übergabe Parameter sind.
Die Methoden aufrufe  katalog.getBuchInfo(request.getParameter(PLUS)) und warenkorb.setWarenkorbElement(buch.getIsbn(), buch) verstehe ich auch nicht so ganz.

katalog und warenkorb werden zu JSTL Objekten, wie würde ich diese bei der Umstellung auf JSTL schreiben? Ich habe in einigen Tutorials gesehen das die selben Methoden durch die Umstellung anders geschrieben wurden. Also aus katalog.getBuchInfo(request.getParameter(PLUS)) würde dann "katalog.buchinfo", aber was passiert mit den Übergabe Parameter? das request ist nur im JSP Dokument vorhanden und muss der Java Methode getBuchInfo übergeben werden! oder mit 2 Übergabeparameter?

Nicht zu vergessen die session wie würde ich die in JSTL schreiben?


----------



## maki (5. Apr 2010)

Als erstes solltest du Darstellung von Logik trennen, sonst kannst du dir den Aufwand sparen Scriptlets durch JSTL zu ersetzen 

Logik am besten in Javaklassen (zB. Servlets oder ggf. eigene Actionklassen), JSPs nur zur Darstellung nutzen, dann erledigen sich deine Fragen von selbst 

Requests gehen nur noch an Servlets (den Controller), dieser bereitet Daten auf und kümmert sich um die Logik, dann das WErgbnis nur noch an eine JSP weiterleiten.
Suche mal nach "MVC" bzw. "Model 2"


----------



## wakoz (5. Apr 2010)

Wo siehst du da Logik? Das ist alles View! Alles an Java Code was ich da drinnen habe ist alleine dazu da um auf dem Browser darzustellen! Entweder um weitere Seiten aufzurufen oder an die Logik werte zu Übergeben, damit diese mit den werten weiterarbeiten kann.

Das MVC Muster verwende ich bereits, aber die Ansteuerung der Logik ist derzeit in Java code geschrieben und das soll alles JSTL werden.

Katalog und WarenKorb sind Bestandteile meines Models und werden im JSP benötigt um session abhängig deren Inhalte in der View darzustellen. Und mehr macht mein Java Code nicht!


----------



## maki (5. Apr 2010)

Das gehört doch in keine View (ausser in PHP vielleciht):

```
Katalog katalog = new Katalog();
 
    Warenkorb warenkorb = (Warenkorb) session
            .getAttribute("ware.warenkorb");
    if (warenkorb == null)
        warenkorb = new Warenkorb();
 
    Buch buch;
    final String ISBN = "isbn";
    final String PLUS = "plus";
 
    buch = katalog.getBuchInfo(request.getParameter(PLUS));
 
    if (buch != null)
        warenkorb.setWarenkorbElement(buch.getIsbn(), buch);
    session.setAttribute("ware.warenkorb", warenkorb);
```
.. und dargestellt wird dadurch gar nix


----------



## wakoz (5. Apr 2010)

delete


----------



## Rydl (5. Apr 2010)

ach komm, das schaffste auch ohne scriptlets


----------



## maki (5. Apr 2010)

> das erzeugt mit meinen Katalog und warenkorb womit hier


Eben, das ist doch keine View


----------



## wakoz (5. Apr 2010)

Da hat sich doch eine Fehler eingeschlichen genau das was du bemängelt hast sollte bereits mein controller machen


----------

