Paging (Seiten umblättern)
Mssmar
- java
Hallo zusammen,
ich versuche das Ergebnis einer Datenbank-Abfrage auf eine Seite anzuzeigen und zwar mit paging Funktionalität und MySql LIMIT/OFFSET. D.h. es dürfen pro Seite nur 4 Datensätze, sage ich Mal, dargestellt werden, aber mit Textlinks für die nächsten Seiten bzw. Datensätze bis zu letzten 4 Datensätze.
Das Ganze funktioniert aber leider nicht und ich kann den Fehler nicht lokalisieren.
Für jede Hilfe bin ich sehr Dankbar.
Gruß
Messmar
Code:
<pg:pager id="p" maxPageItems="4" maxIndexPages="3" export="number,offset" scope="request">
<sql:query var="query1" dataSource="${MyTestDrive}" sql="SELECT dddddd
FROM xxxx, xxxx
WHERE yyyyyyy etc...
ORDER BY zzzzz etc.
LIMIT 4, 4" />
<table cellpadding="0" cellspacing="0" border="1">
<c:forEach var="linha" items="${query1.rows}">
<pg:item>
Anzeigen der Daten....
</pg:item>
</c:forEach>
</table>
<pg:index>
<pg:first><a href='<c:out value="${pageUrl}" />'>[Primeira]</a></pg:first>
<pg:prev><a href='<c:out value="${pageUrl}" />'>[Anterior]</a></pg:prev> <pg:pages><a href='<c:out value="${pageNumber}" />'></a></pg:pages>
<pg:pages><a href='<c:out value="${pageUrl}" />'><c:out value="${pageNumber}"/></a></pg:pages>
<pg:next><a href='<c:out value="${pageUrl}" />'>[Proxima(<c:out value="${pageNumber}"/>)]</a></pg:next>
<pg:last><a href='<c:out value="${pageUrl}" />'>[Ultima]</a></pg:last> <a href="javascript:window.close();"><strong>Fechar</strong></a>
</pg:index>
</pg:pager>
Hello,
Das Ganze funktioniert aber leider nicht und ich kann den Fehler nicht lokalisieren.
konntest du denn die Fehlerbeschreibung zwischenzeitlich finden?
Für jede Hilfe bin ich sehr Dankbar.
ja gerne, ist aber im Moment etwas dürftig...
<sql:query var="query1" dataSource="${MyTestDrive}" sql="SELECT dddddd
FROM xxxx, xxxx
WHERE yyyyyyy etc...
ORDER BY zzzzz etc.
LIMIT 4, 4" />
steht das da echt? LIMIT 4,4 ist ein ziemlich fester Auswahlbereich...
MfG
Rouven
--
\-------------------
sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& ([SelfCode](http://selfspezial.atomic-eggs.com/scode/selfcode.php?encodieren))
Wenn du die Nadel im Heuhaufen nicht findest, zünde den Heuhaufen an.
Hallo,
danke schon Mal für die Antwort.
konntest du denn die Fehlerbeschreibung zwischenzeitlich finden?
Ich bekomme leider keine Fehlermeldung...scheint keinen Syntax Fehler zu sein.
ich könnte höchstens in dem Logfile suchen.
steht das da echt? LIMIT 4,4 ist ein ziemlich fester Auswahlbereich...
LIMIT 4,4 ist halt für:
Es werden auf einer Seite immer nur 4 Datensätze angezeigt und Offset wäre dann auch 4 (+ 4).
Danke und Gruß
Messmar
Hallo!
LIMIT 4,4 ist halt für:
Es werden auf einer Seite immer nur 4 Datensätze angezeigt und Offset wäre dann auch 4 (+ 4).
LIMIT 4*$AktuelleSeite, 4
Wobei Seite 1 einem Variablenwert von 0 entspricht.
danke.
LIMIT 4*$AktuelleSeite, 4
dann musste in der Variable ${AktuelleSeite} einen dynamischen Wert gespeichert werden oder irre ich mich?
Wobei Seite 1 einem Variablenwert von 0 entsprcht.
sollte es folgendermaßen sein:
<c:set var="AktuelleSeite" value=" es muss hier was dynamisch rein oder? " />
Gruß
Messmar
Hallo!
LIMIT 4*$AktuelleSeite, 4
dann musste in der Variable ${AktuelleSeite} einen dynamischen Wert gespeichert werden oder irre ich mich?
Der Wert ist der "Seitenindex". Sagen wir mal du hast 13 Einträge. Du brauchst daher ceil(13/5) = 4 Seiten.
Limit 0,4 holt dir die ersten 4 Einträge (0,1,2,3).
Limit 4,4 holt dir die nächsten 4 (4,5,6,7).
...
Limit 12,4 holt dir die letzten beiden (12,13).
In ${AktuelleSeite} muss also entweder die Aktuelle Seitennummer im Bezug auf die Blätterfunktion stehen und im Script verwendest du ${AktuelleSeite}-1 oder du nummerierst deine Seiten gleich "informatisch" und fängst bei 0 zu zählen an.
sollte es folgendermaßen sein:
<c:set var="AktuelleSeite" value=" es muss hier was dynamisch rein oder? " />
Kenn mich leider mit JSP nicht aus.
Hallo!
Der Wert ist der "Seitenindex". Sagen wir mal du hast 13 Einträge. Du brauchst daher ceil(13/5) = 4 Seiten.
Limit 0,4 holt dir die ersten 4 Einträge (0,1,2,3).
[...]
ok, verstanden
In ${AktuelleSeite} muss also entweder die Aktuelle Seitennummer im Bezug auf die Blätterfunktion stehen und im Script verwendest du ${AktuelleSeite}-1 oder du nummerierst deine Seiten gleich "informatisch" und fängst bei 0 zu zählen an.
Das ist aber die eine und selbe Seite...die wird bei jeder Query dann mit neuem Inhalt neu geladen.
Also der Link sollte irgendwie so sein:
http://localhost:8080/test.jsp&maxPageItems=10&maxIndexPages=10&pager.offset=10
Gruß
Messmar
Hallo!
Das ist aber die eine und selbe Seite...die wird bei jeder Query dann mit neuem Inhalt neu geladen.
Ja, schon. Die jeweilige *fiktive* Seite von der Blätterfunktion.
Also der Link sollte irgendwie so sein:
http://localhost:8080/test.jsp&maxPageItems=10&maxIndexPages=10&pager.offset=10
Und kann man mit JSP nicht einfach eine weitere Variable in der URI übergeben die für die fiktive Seite von der Blätterfunktion steht.
Also so etwa
http://localhost:8080/test.jsp&maxPageItems=10&maxIndexPages=10&pager.offset=10&page=0
________________________________________________________________________________^^^^^^
--
LG,
Snafu
Hallo,
http://localhost:8080/test.jsp&maxPageItems=10&maxIndexPages=10&pager.offset=10
Und kann man mit JSP nicht einfach eine weitere Variable in der URI übergeben die für die fiktive Seite von der Blätterfunktion steht.
Also so etwa
Diese Sache mit dem Parameter, habe ich auch gelöst indem ich die url="" entfernt habe und die anderen notwendigen Parameter in dem pg:pager Bereich
eingefügt.
etwa so:
<pg:param name="carKategorie" value="${param.carKategorie}" />
<pg:param name="preisKategorie" value="param.preisKategorie" />
<pg:param name="email" value="${param.email}" />
<pg:param name="privacy" value="${param.privacy}" />
....
Das Script funktioniert jetzt prima... ich bräuchte nur die Lösung dafür, wie ich den Parameter: maxPageItems dynamisch vorbelegen kann. Der muss die Anzahl der gesamten vorhandenen Datensätze nach einer Query enthalten und davon 1 substrahiert.
Danke und Gruß
Messmar
Hi,
konntest du denn die Fehlerbeschreibung zwischenzeitlich finden?
Ich bekomme leider keine Fehlermeldung...
Du verstehst den Wink mit dem Zaunpfahl wieder mal nicht, hm?
scheint keinen Syntax Fehler zu sein.
Wer deine Postings aus der Vergangenheit kennt weiss, dass bei dir die Logikfehler auch immer einen betraechtlichen Teil des Problems ausmachen.
MfG ChrisB
Hallo,
die SQL Query funktioniert ohner weiteres... Es werden auch zunächst nur 4 Datensätze angezeigt. Das Problem legt genau bei pg:index....</pg:index>
von dem folgenden Code schnipsel wird auf die Seite nichts ausgegeben, also ich bekomme keine Navigation bzw. Link zu sehen.
Gruß
Messmar
Das Teil hier:
<pg:index>
<pg:first><a href='<c:out value="${pageUrl}" />'>[Primeira]</a></pg:first>
<pg:prev><a href='<c:out value="${pageUrl}" />'>[Anterior]</a></pg:prev> <pg:pages><a href='<c:out value="${pageNumber}" />'></a></pg:pages>
<pg:pages><a href='<c:out value="${pageUrl}" />'><c:out value="${pageNumber}"/></a></pg:pages>
<pg:next><a href='<c:out value="${pageUrl}" />'>[Proxima(<c:out value="${pageNumber}"/>)]</a></pg:next>
<pg:last><a href='<c:out value="${pageUrl}" />'>[Ultima]</a></pg:last> <a href="javascript:window.close();"><strong>Fechar</strong></a>
</pg:index>
Hallo,
> <pg:pager id="p" maxPageItems="4" maxIndexPages="3" export="number,offset" scope="request">
Welche Paging-Taglib verwendest du hier? Ich habe über Google zwei verschiedene
Taglibs mit leicht unterschiedlicher Syntax gefunden.
Bitte schreib nächstes mal dazu, welche Taglibs du verwendest, denn das ist
nicht selbstverständlich.
<table cellpadding="0" cellspacing="0" border="1">
<c:forEach var="linha" items="${query1.rows}">
pg:item
Anzeigen der Daten....
</pg:item>
</c:forEach>
</table>
Was passiert, wenn du hier mal festkodiert ein paar Items zum Paging hinzufügst?
Werden sie dann im pg:index-Bereich angezeigt? Kannst du im forEach mal ein
paar Testausgaben machen, um zu sehen, dass überhaupt richtig iteriert wird?
pg:index
pg:first<a href='<c:out value="${pageUrl}" />'>[Primeira]</a></pg:first>
pg:prev<a href='<c:out value="${pageUrl}" />'>[Anterior]</a></pg:prev> pg:pages<a href='<c:out value="${pageNumber}" />'></a></pg:pages>
pg:pages<a href='<c:out value="${pageUrl}" />'><c:out value="${pageNumber}"/></a></pg:pages>
pg:next<a href='<c:out value="${pageUrl}" />'>[Proxima(<c:out value="${pageNumber}"/>)]</a></pg:next>
pg:last<a href='<c:out value="${pageUrl}" />'>[Ultima]</a></pg:last> <a href="javascript:window.close();"><strong>Fechar</strong></a>
</pg:index>
</pg:pager>
Taucht das hier auch nicht im Quelltext des zurückgelieferten HTML-Dokuments
auf? Hast du mal in den HTML-Sourcecode geschaut?
Gruß
Slyh
Hallo,
Welche Paging-Taglib verwendest du hier? Ich habe über Google zwei verschiedene
Taglibs mit leicht unterschiedlicher Syntax gefunden.
die hier:
pager-taglib.tld in dem Verzeichnis: /WEb-INF/tld
und dazu die zwei JAR-Dateien in dem Verzeichnis: /WEB-INF/lib
Import in der JSP Datei:
<%@ taglib uri="http://jsptags.com/tags/navigation/pager" prefix="pg" %>
Tomcat: 6.x
Alles läuft sauber ;-)
[...]
Was passiert, wenn du hier mal festkodiert ein paar Items zum Paging hinzufügst?
habe ich schon:
<c:forEach var="linha" items="${query.rows}">
pg:item
<tr>
<td ><c:out value="${linha.brandname}"/>: </td>
<td ><c:out value="${linha.priceto}"/></td>
<td ><c:out value="${linha.pricefrom}"/></td>
</tr>
</pg:item>
</c:forEach>
Werden sie dann im pg:index-Bereich angezeigt?
im pg:index-Bereich wird leider nichts angezeigt.
Kannst du im forEach mal ein
paar Testausgaben machen, um zu sehen, dass überhaupt richtig iteriert wird?
pg:index
pg:first<a href='<c:out value="${pageUrl}" />'>[Primeira]</a></pg:first>
[...]
Taucht das hier auch nicht im Quelltext des zurückgelieferten HTML-Dokuments
auf? Hast du mal in den HTML-Sourcecode geschaut?
Gute Frage ;-) der dazugehörige HTML CODE (<a href=""></a>) wird leider nicht angezeigt...als würden die pg:first und pg:prev Bereiche etc. gar nicht interpretiert.
Gruß
Messmar
Hallo,
Was passiert, wenn du hier mal festkodiert ein paar Items zum Paging hinzufügst?
habe ich schon:
<c:forEach var="linha" items="${query.rows}">
pg:item
<tr>
<td ><c:out value="${linha.brandname}"/>: </td>
<td ><c:out value="${linha.priceto}"/></td>
<td ><c:out value="${linha.pricefrom}"/></td>
</tr>
</pg:item>
</c:forEach>
Ich meinte jetzt eigentlich außerhalb der forEach-Schleife. Angenommen die
Schleife würde nicht ausgeführt werden, dann würde auch nie ein pg:item
aufgerufen werden.
Werden sie dann im pg:index-Bereich angezeigt?
im pg:index-Bereich wird leider nichts angezeigt.
S.o.
paar Testausgaben machen, um zu sehen, dass überhaupt richtig iteriert wird?
Hier meinte ich, dass du mal ins forEach eine einfache Ausgabe (anstelle der
pg:item-Tags) einfügen könntest, um zu sehen, ob die Schleife überhaupt
iteriert.
Ansonsten sehe ich gerade keinen offensichtlichen Fehler. Allerdings habe ich
dieses Paging auch noch nie verwendet. Ich würde versuchen, weniger Ausgaben
in den pg:index-Bereich einzufügen und schauen ob es dann geht. Und wenn
nicht, dann die Datenbankabfrage entfernen und durch festkodierte pg:item
ersetzen usw.
Kurz: Probier mal ein minimales Beispiel zu erstellen, das ohne Datenbankabfrage
und ohne komplexe Ausgabe im pg:index-Bereich auskommt. (Vielleicht indem du
auch irgendwo aus dem Netz ein Beispiel lädst.) Und das erweiterst du dann nach
um nach mit deinem Code und probierst nach jedem Schritt, ob noch alles funktioniert.
Gruß
Slyh
Hallo,
Ich meinte jetzt eigentlich außerhalb der forEach-Schleife. Angenommen die
Schleife würde nicht ausgeführt werden, dann würde auch nie ein pg:item
aufgerufen werden.
habe ich schon und alles ist I.O.
Das komische Dabei ist, wenn den folgenden Link hier außerhalb von pg:items einbinde, dann wird es dargestellt und mit der URL, allerdings ohne weitere Parameter für die Navigation. ich meine maxPageItems=... etc.
<a href='<c:out value="${pageUrl}" />'>[Primeira]</a>
Danke und Gruß
Messmar
Hallo,
um nach mit deinem Code und probierst nach jedem Schritt, ob noch alles funktioniert.
OK, jetzt funktioniert zum Teil...wenigsten die Navigation wird angezeigt, aber es fehlt mir den Trick, wie ich den richtigen Parameter in der URL anhänge.
Es legt und lag daran, dass ich in der Sql Query den LIMIT und OFFSET nicht richtig eingegeben habe.
jetzt habe ich dort: LIMIT 0, 12
Also zum testen, aber ich kann zu den nächsten Datensätze nicht kommen.
Ich habe jetzt bestimmt was falsch bei LIMIT und OFFSET.
Vielen Dank und Gruß
Messmar
Hallo,
Danke vielmals für deine Hilfe/Tipps...Jetzt funktioniert es komplett.
Gruß
Messmar