Wie kann ich den XML-Inhalt mit dem Klicken auf den Hyperlink (a-Tag) auf der nächsten Seite ansehen

ebruss17

Bekanntes Mitglied
Hallo Community,

ich habe in einer DB2-datenbank XML-Strukturen in der letzten Tabellen-Spalte angelegt. Nun möchte ich, dass bei der Ausgabe der ganzen Tabelle, (die ich mit JavaServer Pages realisiert habe, sodass die ganze Tabelle momentan als Webseite ausgegeben wird), innerhalb dieser XML-Spalte nur das Wort "Klicken" stehen soll, das ich auch schon hinbekommen habe und wenn man dann auf diesen Hyperlink draufklickt, soll auf der nächsten Seite der XML-Inhalt ausgegeben werden :) Mein Code dazu:



Java:
<%
							while (kunden.next()) {
						%>

						<tr>
							<%
								for (int i = 1; i <= numberOfColumns; i++) {
									
									if( i != numberOfColumns ) {

							%>
							<td><%=kunden.getString(i)%></td>
							
							<%
								} else {
							%>
							<td><a href="<%kunden.getString(i); %>"><%kunden.getString(i);%>Klicken</a></td>
						</tr>

						<%
							}
							} } } catch (SQLException e) {

							}
						%>


Im Moment ist es noch so, dass beim Klicken auf den Hyperlink nichts geschieht (also das Klicken bringt mich nicht in eine andere Seite, wo ich den XML-Inhalt sehen kann.)
 

Joose

Top Contributor
Im Moment ist es noch so, dass beim Klicken auf den Hyperlink nichts geschieht (also das Klicken bringt mich nicht in eine andere Seite, wo ich den XML-Inhalt sehen kann.)

Was bekommst du bei "kunden.getString(i)"?

Ich nehme an dein Link funktioniert nicht weil es kein Dokument gibt welches als Inhalt dein XML hat, bzw. irgendwo hin verlinkst.
Du musst zu einer passenden Ressource linken bzw. auf eine Seiter weiterleiten welche sich anhand des Keys den XML Part aus der DB holt und anzeigt.
 
Zuletzt bearbeitet:

ebruss17

Bekanntes Mitglied
kunden.getString(i) zeigt und gibt mir nichts zurück...

wenn ich aber

Java:
<td><a href="<%=kunden.getString(i)%>"><%kunden.getString(i);%>Klicken</a></td>

mache, bekomme ich auf der jeweiligen Spalte nicht mehr das Wort "Klicken", sondern den XML-Inhalt ausgegeben und wenn ich auf den XML-Inhalt klicke bekomme ich auf der folgenden Seite FileNotFoundException. Das sollte aber nicht so sein, sondern erst wenn ich auf "Klicken" klicke, soll es mir den XML-Inhalt ausgeben.
 

Joose

Top Contributor
mache, bekomme ich auf der jeweiligen Spalte nicht mehr das Wort "Klicken", sondern den XML-Inhalt ausgegeben

Dann gibt dir "kunden.getString(i)" das XML zurück und dieses verwendest du als Link Text.

und wenn ich auf den XML-Inhalt klicke bekomme ich auf der folgenden Seite FileNotFoundException.

Weil laut deinem Code der Link zu "kunden.getString(i)" weiterleiten soll, nur gibt es keine Datei mit diesem Namen ;)

Das sollte aber nicht so sein, sondern erst wenn ich auf "Klicken" klicke, soll es mir den XML-Inhalt ausgeben.

Wie oben schon gesagt entweder stellst du das XML File direkt zur Verfügung -> die DB würde nicht das XML direkt speichern sondern nur den Pfad zum XML am Webspace
Oder du verlinkst auf eine andere JSP in welcher du einen übergebenen Parameter verarbeitest und dir das XML aus der DB holst und anzeigst.
 

ebruss17

Bekanntes Mitglied
Die letzte Variante hört sich gut an, nun wie das gelöst werden soll, habe ich keine Ahnung bezüglich "übergebenen Parameter verarbeiten". ODER das könnte man vielleicht mit einem XML-Viewer lösen oder?
 

Joose

Top Contributor
Leider weiß ich nicht was JSP hier alles anbietet, aber eine Möglichkeit Parameter zu übergeben wäre die URL.
Sprich dein Link leitet dich auf Seite XY (eine deiner Seiten) dort wird der Parameter aus der URL ausgelesen und ...... (rest wie oben beschrieben).

Wie soll es denn mit einem XML Viewer gehen? Wenn du eine Idee hast probiere sie einfach mal aus :) das geht schneller als im Forum darüber zu diskutieren. Sollte es nicht klappen auch kein Problem in der Zwischenzeit hat jemand schon eine Alternative im Forum genannt und fürs nächste Mal weißt du es gleich das es nicht geht.
 

ebruss17

Bekanntes Mitglied
Meinst du das etwa so?? :

Java:
	<td><a href="XML.jsp"><%kunden.getString(i);%>Klicken</a></td>


Und was sollte noch hinzugefügt werden??
 
Zuletzt bearbeitet:

Joose

Top Contributor
Meinst du das etwa so?? :

Naja fast

<a href="XML.jsp">

Genau, nur vielleicht noch mit "?xml=[id des datensatz]" ergänzen außer JSP bietet hier besser Möglichkeiten an Parameter zu übergeben.

<%kunden.getString(i);%>Klicken

Du willst dass der Text "Klicken" dein Link Text ist, warum lässt du hier noch immer dein XML ausgeben?
Welchen Sinn soll das haben?
 

ebruss17

Bekanntes Mitglied
Habe das jetzt mal so gemacht:

Ich glaub, habe es mir "?xml..... " nicht so ganz verstanden :(

Java:
<td><a href="?xml=[Lieferantinformationen]XML.jsp">Klicken</a></td>
 

Joose

Top Contributor
Nein auf einen Wert durch welchen du den entsprechenden Datensatz eindeutig identifizieren kannst!

In deiner XML.jsp musst du ja das XML zu einem spezifischen Datensatz suchen, dazu wirst du einen entsprechenden Identifier brauchen (ID, Key Werte, ....)
Und genau diesen Identifier musst du eben als Parameter mitgeben
 

Joose

Top Contributor
Um einen Datensatz in einer Tabelle eindeutig zu identifizieren -> Primary Key.
Dieser PrimaryKey kann eine Zahl, ein Datum oder ein String sein und aus einer oder mehreren Spalten bestehen.

Und eben diese Daten des PrimaryKeys musst du übergeben. So kannst du in der XML.jsp eindeutig festlegen von welchem Datensatz das XML angezeigt werden soll.
 

ebruss17

Bekanntes Mitglied
Also innerhalb der datenbanktabelle, wo meine XML-Spalte enhalten ist, gibt es eine PrimaryKey-Spalte vom Typ Int, die (lf_ID) benannt wurde. kommt ja jetzt

<td><a href="XML.jsp?xml=[lf_ID]">Klicken</a></td>
??
 

ebruss17

Bekanntes Mitglied
okay habe es jetzt so umgestellt:

Java:
<td><a href="XML.jsp?xml=lf_ID">Klicken</a></td>


Was muss ich jetzt im nächsten Schritt innerhalb der "XML.jsp"-Datei machen? Und vorallem vielen vielen Dank, dass du so hilfsbereit bist.
 

Joose

Top Contributor
Java:
<td><a href="XML.jsp?xml=lf_ID">Klicken</a></td>

Warum den Spaltennamen? In der jeweiligen Zeile den entsprechenden Wert der Spalte "lf_ID" nehmen!

Was muss ich jetzt im nächsten Schritt innerhalb der "XML.jsp"-Datei machen? Und vorallem vielen vielen Dank, dass du so hilfsbereit bist.

Bei aller Liebe finde ich sollte hier auch die entsprechende Eigeninitiative gezeigt werden.
In dem XML.jsp musst du eben nun den Parameter auslesen ein entsprechende SELECT ausführen und dir den XML Content aus der DB holen und anzeigen.
 

ebruss17

Bekanntes Mitglied
so:

Java:
<td><a href="XML.jsp?xml=86">Klicken</a></td>

Die ID "86" ist als Primärschlüssel in der Lieferung-Tabelle enthalten. ABER es gibt noch andere ID's in der jeweiligen Lieferung-Tabelle, die XML-Strukturen enthalten wie z.b. die ID 85, 84, 63 usw. Könnte ich das denn nicht irgendwie dynamisch umsetzen?
 

Joose

Top Contributor
Natürlich geht das.

Nun möchte ich, dass bei der Ausgabe der ganzen Tabelle, (die ich mit JavaServer Pages realisiert habe, sodass die ganze Tabelle momentan als Webseite ausgegeben wird)

Du kannst ja schon Tabelleninhalte ausgeben, ich nehme an hier arbeitest du ebenfalls dynamisch ;)
 

Joose

Top Contributor
Du hast ja deine Tabelle schon ausgegeben. Das Problem es steht überall eben "xml=86" und du willst diese ID natürlich dynamisch machen damit in jeder Zeile die richtige ID steht.

Deine Tabelle wirst du ja dynamisch aufgebaut haben oder? Solange "kunden.next()" true ist fügst du eine TR hinzu. Dann lies doch die ID von "kunden" aus?!?
 

ebruss17

Bekanntes Mitglied
Hab es jetzt so umgesetzt:

Java:
<td><a href="XML.jsp?xml=<%=kunden.getString("lf_ID")%>">Klicken</a></td>

Nun steht beim Klicken auf das Wort "Klicken" auf der nächsten Seite immer die zugehörige ID in der URL drinnen :)

Sooo jetzt nun zur Datei "XML.jsp".... Was sollte im ersten Schritt gemacht werden? Da ich JavaServer Pages nur momentan das erste Mal angewendet habe, komme ich da nicht so zügig voran und entschuldige mich für die ständigen Fragen :oops:
 

Joose

Top Contributor
1) Lies die ID aus der URL aus

2) Führe das passendes SELECT Statement aus

3) Baue dir deine View zusammen

4) fertig

Bis auf Punkt 1 hast du alles schon auf der anderen Seite realisiert :)
 

ebruss17

Bekanntes Mitglied
Die "XML.jsp" sieht nun so aus:

Java:
<body>
	<%
		String id = request.getParameter("xml");

		int zahl;

		try {
			zahl = Integer.parseInt(id);
		} catch (NumberFormatException e) {
		}
	%>
</body>

Wie könnte eine passende SELECT-Anweisung dazu denn aussehen?
 

Joose

Top Contributor
Woher soll ich denn wissen wie das SELECT aussehen sollte?
Du weißt auf welche Datenbanktabelle du zugreifen willst und welche Daten du abfragen willst. Dem entsprechend bastelst du dir dein SQL Select Statement zusammen.
 

Joose

Top Contributor
Probiere es einfach aus indem du ein Dummy Textfield hinzufügst und dort den von dir ausgelesenen Parameter ausgeben lässt :)
 

Joose

Top Contributor
Probiere es aus :)
In der Zwischenzeit wo du auf eine Antwort wartest wäre es sich ausgegangen einfach einmal das Programm zu starten und zu testen ;)
Wie hast du auf der anderen Seite denn Sachen ausgegeben?
 

ebruss17

Bekanntes Mitglied
okay im Textfeld wird immer die richtige jeweilige ID ausgegeben GOTT sei Dank ;). Wie kombiniere ich das jetzt die ID mit der Ausgabe der XML-Struktur mit ihren Inhalten?? Oder soll ich beim Selektieren einfach nur die XML-Spalte auswählen??
 

ebruss17

Bekanntes Mitglied
Ich habe das mal jetzt so umgesetzt:

Java:
<% while (kunden.next()){ %>
	
	<p> 
   <%=kunden.getString("Lieferantinformationen")%>
</p>
	<%
		}
	%>

Die Datenbanktabellenspalte "Lieferantinformationen" bezieht sich auf die XML-Spalte in der Datenbanktabelle. In diesem Fall werden aber alle XML-INhalte auf der nächsten Seite angezeigt, ich möchte aber, dass nur der XML-Inhalt der jeweiligen ID-Wert angezeigt wird, je nachdem auf welchen ich geklickt habe ....:(
 

Joose

Top Contributor
Wie gesagt hole dir nur die Daten welche du brauchst.
Wozu hast du dir die ID als Parameter übergeben lassen? Damit du im SQL Select speziell nur den Datensatz für die EINE ID ausliest.
 

ebruss17

Bekanntes Mitglied
Wozu hast du dir die ID als Parameter übergeben lassen? Damit du im SQL Select speziell nur den Datensatz für die EINE ID ausliest.

Und wie mache ich das im SQL-Select? In meinem Fall hole ich die XML-Spalte "Lieferantinformationen" raus. Was mach ich denn falsche und wie muss das korrekt sein? Fast fertig mit der entsprechenden Aufgabe... bitte um HILFEEE
 

Joose

Top Contributor
"SELECT * FROM Tabelle" -> selektiert dir alle Daten einer Tabelle
"SELECT ID, Text FROM Tabelle" -> selektiert dir ID und Text von allen Datenzeilen

SQL bietet dir die Möglichkeit diese SELECT mit Hilfe einer WHERE Bedingung zu "filtern".


Nein ich werde dir kein Beispiel und ähnliches liefern, lies dich bitte in das Thema SQL ein!
Wenn du eine "Technik" verwenden willst (in diesem Fall Datenbanken und SQL) dann musst du dir eben die entsprechenden Grundlagen aneignen.
Dabei können wir nur insofern helfen als das wir Unklarheiten beseitigen, dazu muss es aber erst mal konkrete Fragen geben.
Und diese kannst du erst stellen wenn du dich mit diesem Thema befasst hast.
 

ebruss17

Bekanntes Mitglied
Geht das in die richtige Richtung?

Java:
selectKunden = connection
		.prepareStatement("SELECT lf_ID, Lieferantinformationen FROM Lieferant WHERE lf_ID = ");

Mit SQL kenne ich mich relativ gut aus, ABER ich bin gerade verwirrt wegen der Parametergeschichte und weiss nciht, wie ich die ID mit der XML-Spalte kombinieren soll...
 
Zuletzt bearbeitet:

Joose

Top Contributor
Wie schon weiter oben gesagt, probiere deine Ideen einfach aus! Schreibe deinen Code und teste ihn, sollte etwas nicht klappen dann stelle eine konkrete Frage mit Fehlerbeschreibung etc.
 

ebruss17

Bekanntes Mitglied
Mit SQL kenne ich mich relativ gut aus, ABER ich bin gerade verwirrt wegen der Parametergeschichte und weiss nciht, wie ich die ID mit der XML-Spalte kombinieren soll...
 

Joose

Top Contributor
Ich sehe das Problem nicht, wenn du dich mit SQL relativ gut auskennst sollte das Erstellen/Definieren des passenden SELECT Statement mit der passenden WHERE Bedingung kein Problem sein.
 

ebruss17

Bekanntes Mitglied
Ich habe es so gemacht, aber wird eine NullPointerException geworfen:

Java:
selectKunden = connection.prepareStatement("SELECT lf_ID, Lieferantinformationen FROM Lieferant WHERE lf_ID = \"id\"");

Habe versucht der lf_ID den ausgelesenen Parameter zu übergeben....
 

Joose

Top Contributor
eine NullPointerException geworfen

Ohne StackTrace und Code lässt sich dazu nur sagen:
Du greifst auf ein Objekt zu welches nicht initialisiert wurde (daher null ist). Der StackTrace verrät dir genau die Zeile wo der Fehler passiert, suche diese Zeile und überlege dir warum das Objekt "null" ist und wie du es beheben kannst.

Java:
selectKunden = connection.prepareStatement("SELECT lf_ID, Lieferantinformationen FROM Lieferant WHERE lf_ID = \"id\"");

Habe versucht der lf_ID den ausgelesenen Parameter zu übergeben....

Du musst einfach nur Strings verketten -> das gehört zu den einfachsten Java Grundlagen.
 

ebruss17

Bekanntes Mitglied
ich habe es nun so verucht zu lösen klappt aber immernoch nicht:
Java:
selectKunden = connection.prepareStatement("SELECT lf_ID, Lieferantinformationen FROM Lieferant WHERE lf_ID = 'id' ");

kommt aber ein SQLDataException...:(
 
Zuletzt bearbeitet:

Joose

Top Contributor
Eine Exception kommt normalerweise nicht allein ;)
Es steht immer eine Meldung dabei und manchmal sogar der StackTrace!

Dein SQL Statement ist falsch, du musst natürlich den Wert den du aus der URL einliest verwenden.
 

JavaMeister

Gesperrter Benutzer
Ich bin gespannt nach wievielen hundert Beiträgen der Thread in einer Lösung findet.

Nicht schlecht nach weniger als 12 Stunden herauszubekommen mit perfekten Try and Error, wie man GET oder POST Parameter übergibt. Ich mein das ist nichtmal JSP spezifisch.

In der Zeit hätte man Locker das von mir im anderen Thread empfohlene Buch durchgelesen... Und man hätte wenigstens Basiswissen. Aber nein, man quält sich hier durch "Ist das so richtig?" "Und so?" Und wenn ich das so mache??

Was ist das denn? Dafür ist das Forum weder ausgelegt noch gedacht.
 

ebruss17

Bekanntes Mitglied
okay ich habe jetzt es mit "zahl" probiert.

Java:
<%
		String id = request.getParameter("xml");

		int zahl;

		try {
			zahl = Integer.parseInt(id);
		} catch (NumberFormatException e) {
		}
	%>

	<%!public class Kunde extends HttpServlet {

		String url = "jdbc:db2://localhost:50000/mysample";
		String user = "db2admin";
		String password = "forever2007?";

		Connection connection = null;
		PreparedStatement selectKunden = null;
		ResultSet resultSet = null;

		public Kunde() {

			try {

				connection = DriverManager.getConnection(url, user, password);

				selectKunden = connection
						.prepareStatement("SELECT lf_ID, Lieferantinformationen FROM Lieferant WHERE lf_ID ="
								+ zahl);

			} catch (SQLException e) {
				e.printStackTrace();
			}
		}

Aber die Variable "zahl" kann nicht in einer Variable aufgelöst werden stehht jetzt im SELECT-Statement....
 
Zuletzt bearbeitet:

Joose

Top Contributor
Es ist immer praktisch wenn du zwar probierst einen Fehler zu beschreiben aber nicht die Fehlermeldung und StackTrace kopierst ;)
Mach es dir ja nicht einfach :D

Ich nehme an "lf_ID" hat einen Varchar oder Char als Datentyp, daher muss im WHERE Teil auch mit einem Varchar/Char verglichen werden.
Aber bei dem relativ guten SQL Wissen sollte man das eigentlich selbst wissen.
 

ebruss17

Bekanntes Mitglied
"request" kann im SELECT-STatement ebenfalls nicht aufgelöst werden, also ich kann das ganze nicht mal starten, damit ich den StackTrace hierher kopieren könnte, was genau der Fehler hierbei ist.

Mein Code:

Java:
selectKunden = connection.prepareStatement("SELECT lf_ID, Lieferantinformationen FROM Lieferant WHERE lf_ID ='" + request.getParameter("xml") + "' ");

:lol:
 

Joose

Top Contributor
Dann kann man dir nicht weiterhelfen wenn du nicht bald man anfängst dir unsere Beiträge durchzulesen und Kritik anzunehmen!

Wenn du einen Fehler hast dann musst du eben Fehlermeldung, StackTrace und Code welcher den Fehler produziert posten.
Und bevor du das machst bemühst du zuerst Google und schaust ob nicht jemand anderes schon eine Lösung zu Fehler X gefunden hat.


[EDIT]
Ja das ist auch logisch, du definierst eine Klasse Kunde in welcher du die Variable "zahl" bzw. "request" verwenden willst.
"zahl" und "request" sind aber außerhalb der Klasse in einem anderen Kontext definiert und daher nur dort verfügbar.
Da ich mich mit jsp nicht gut auskenne kann ich dir hierbei nicht weiterhelfen.
[/EDIT]
 
Zuletzt bearbeitet:

Ähnliche Java Themen


Oben