Vill skriva in en hel htmlsida i ens ervlet. Vill inte visa resultatet på en jsp sida med hjälp av böna.
Finns det inget smidigare sätt att skriva in all kod, för att slippa:
Finns det inget smidigare sätt att skriva in all kod, för att slippa:
Jo visst gör det det och det smidigaste sättet är ju just att köra det som en JSP-sida, som ju ändå blir en kompilerad servlet vid första körningen.
Skulle bara vilja skriva in det på en lång rad, är endast några få rader ren java.
Vad är det du vill skriva på en rad? Java eller HTML? Vad är det som endast är några få rader ren java?
Om du nu inte vill lägga HTML-koden i en JSP av någon anledning så får du antingen skriva ut den via response.getOutputStream().println() eller bygga någon egen funktion som t.ex läser templates/textfiler med HTML, fyller dessa med genererat data och dumpar ut dessa på responsen, eller något liknande.
Beskriv gärna varför du inte vill använda JSP och vad du skall göra mer exakt så är det lättare att ge ett bra svar.
I servleten skapar du ett objekt som håller det data du vill visa på sidan. När det objektet är färdigfyllt så lägger du in det i requestobjektet och gör en forward till JSP-sidan, där du plockar fram objektet och visar det, blir mycket trevligare och snyggare.
Så här ungefär:
I din servlets doGet-metod:
.......
ArrayList result = new ArrayList();
while ( m.find() ) {
result.add(new TravResult(m.group(1), m.group(2), m.group(3). m.group(4)));
}
// Lägg travresultatet i requestet
request.setAttribute("travresult", result);
// Kör en forward till JSP-sidan
RequestDispatcher rd = request.getRequestDispatcher("travresult.jsp");
rd.forward(request, response);
I din JSP-sida:
<% ArrayList travResult = (ArrayList)request.getAttribute("travresult"); %>
<html><body>
<b>Finfina travresultat:</b><br>
<%
[i]Iterera genom Collection-objektet med travresultat och skriv ut varje resultat här[/i]
%>
</body></html>
Travresultaten bakas alltså in i en Collection, t.ex en ArrayList eller en egen klass som ärver eller kapslar in lämplig Collection. Detta objekt trycks i requestet som skickas vidare till JSP-sidan (detta sker på servern så allt sker i samma request). Du plockar ut objektet i JSP-sidan och kan jobba med det där. Smidigt.
Det här kodstycket skapar ett nytt TravResult-objekt med värdena som plockats ut av regexp-en och lägger in detta i ett Collection-objekt av typen ArrayList.
Det du måste göra är att implementera en enkel klass TravResult som håller datat, t.ex:
public class TravResult {
[i]// Jag har ingen aning om vilka typer av data du plockar ut, så jag hittade på dessa:[/i]
private String horseName;
private String jockeyName;
private String finalPosition;
private String race;
[i]// konstruktor[/i]
public TravResult(String horseName, String jockeyName, String finalPosition, String race) {
this.horseName = horseName;
this.jockeyName = jockeyName;
this.finalPosition = finalPosition;
this.race = race;
}
[i]// getters och setters[/i]
public String getHorseName() {
return horseName;
}
public void setHorseName(String horseName) {
this.horseName = horseName;
}
[blue] ... och så vidare... en get/set-metod per fält.[/blue]
}
När du plockat fram alla resultat och populerat ArrayListen med dessa resultat i form av ovanstående TravResult-objekt och stoppat in ArrayListen i requestet så kan du mycket enkelt jobba med dessa i JSP-sidan:
travresult.jsp:15: Undefined variable: TravResult
TravResult result = (TravResult).next();
Andreas
Du måste importera klassen TravResult (eller ange hela paketnamnet) i JSP-sidan, har du t.ex lagt klassen i paketet com.foo.trav så skriver du en page-import i JSP-sidan så här:
<%@ page import="com.foo.trav.TravResult" %>
Du kommer även behöva importera ArrayList och Iterator, så släng in dom också:
Note: sun.tools.javac.Main has been deprecated.
travresult.jsp:16: Method next() not found in class TrottingResult.
TrottingResult resultat = TrottingResult.next();
Note: sun.tools.javac.Main has been deprecated.
travresult.jsp:16: Method next() not found in class TrottingResult.
TrottingResult resultat = TrottingResult.next();
Andreas
Jag hade skrivit ett slarvfel ovan och missat i (iteratorn), har rättat till det. Din klass TrottingResult har ingen next()-metod, det är Iterator-objektet som fås från ArrayListen som har det och det är den du använder för att iterera (stega igenom) listan med resultat: