Anzeige:
Ergebnis 1 bis 2 von 2

Thema: Designfrage JSP-Seite

  1. #1
    Registrierter Benutzer
    Registriert seit
    26.02.2004
    Ort
    Grefrath
    Beiträge
    28

    Designfrage JSP-Seite

    Hallo zusammen!

    Ich noch ganz frisch in der JSP-Thematik, also bitte etwas nachsicht

    Immer wieder habe ich JSP-Seiten, die eine Collection von Container-Objekten ausgeben sollen.
    Meine ersten Testcodes resultieren in so etwas:
    Code:
    <%
        Iterable<Credit> allCredits = new Credits().getAllCredits();
        for( Credit aCredit : allCredits ) { %>
    <div class="creditItem">
        <div class="creditPic"><img border="0" src="<%= aCredit.getPicture() %>" width="100" height="145" alt=""></div>
    <h2> <%= aCredit.getTitle() %> </h2>
    <div class="creditContent"> <%= aCredit.getText() %>
        <% if ( aCredit.getEmail().length() > 0) { %>
            <h3>Kontak:</h3>
            <span class="title">Email: </span> <%= aCredit.getEmail() %> <br /></br />
             <%= aCredit.getIcq() %>
        <% } %>
    </div>
    </div>
    <% } %>
    Credit ist eine normale Container-Klasse mit ein paar Gettern und Settern.
    Credits hat als Aufgabe (man könnte getAllCredits auch static machen) die Daten aus der Datenbank zu lesen und in eine Collection (hier ist es ein Vector) zu packen.

    Um ehrlich zu sein finde ich den Code alles andere als schön. Das muss doch auch irgendwie vernünftiger gehen.
    Mir hat jemand JSTL an den Kopf geworfen nur fehlt mir dazu ein wenig der Einstieg.
    Aus den Dokus bei Sun werde ich jedenfalls nicht sehr schlau. Ein vernünftiges Beispiel würde mir wohl schon helfen.

    Danke schonmal fürs Lesen

  2. #2
    Registrierter Benutzer Avatar von Waxolunist
    Registriert seit
    19.06.2006
    Ort
    Wien
    Beiträge
    485
    Mit Taglibraries wird das ganze schon schöner, aber in der Wartung liegt imho eines der großen Probleme von JSPs im Allgemeinen.

    http://java.sun.com/developer/techni...rpages/faster/
    http://java.sun.com/products/jsp/tut...rariesTOC.html

    Hier findest du einfache Beispiele in der Anwendung der Standard Taglibrary und für Custom Tags.

    Nichts desto trotz hat JSP eine große Anwendergemeinde, keine Ahnung warum genau.

    Ohne Tags würde ich aber an keiner JSP mehr arbeiten wollen. Dein Programmierstil sieht allerdings ohnehin sehr vernünftig aus, und ich wüßte jetzt nicht, wo hier Tags Code einsparen würden, denn du mußt aufpassen, nicht der Versuchung zu erliegen, HTML-Code in Java-Klassen mit out.println() zu schreiben.

    Ein konkretes Beispiel:

    Eine Verzögerung in eine JSP-Datei einbauen. Genannt Waiter.

    Du musst zunächst eine Datei tagdelay.tld erzeugen.

    Code:
    <?xml version="1.0" encoding="ISO-8859-1" ?>
    <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
    
    <taglib>
    <tag>
    	<name>delay</name>
    	<tagclass>jsp.taglibrary.common.Waiter</tagclass>
    	<bodycontent>JSP</bodycontent>
    	<info>Delays execution</info>
    
    	<attribute>
    		<name>seconds</name>
    		<required>false</required>
    		<rtexprvalue>true</rtexprvalue>
    	</attribute>
    </tag>
    </taglib>
    Das Tag ruft die Klasse Waiter auf. Mit dem Attribut seconds, also wie lange es das sleep ausführen soll.

    Dann machst du einen Link in deiner WEB-INF/web.xml Datei:
    Code:
    <taglib>
    			<taglib-uri>/WEB-INF/tlds/taglibdelay.tld</taglib-uri>
    			<taglib-location>/WEB-INF/tlds/taglibdelay.tld</taglib-location>
    		</taglib>
    Dann erzeugst du die Klasse Waiter:

    Code:
    package jsp.taglibrary.common;
    
    import javax.servlet.jsp.JspException;
    import javax.servlet.jsp.tagext.TagSupport;
    
    import org.apache.log4j.Logger;
    
    public class Waiter extends TagSupport {
    	
    	private static Logger logger = Logger.getLogger(Waiter.class.getName());
    
    	String id;
    	String seconds;
    	
    	
    	public String getId() {
    		return id;
    	}
    	
    	public void setId(String id) {
    		this.id = id;
    	}
    	
    	public void setSeconds(String seconds) {
    		this.seconds = seconds;
    	}
    	
    	public String getSeconds() {
    		return seconds;
    	}
    	
    	public long getWaittime() {
    		return Long.parseLong(getSeconds())*1000;
    	}
    	
    	public int doEndTag() throws JspException {
    		logger.debug("Wait " + getSeconds() + " seconds. ");
    		try {
    			Thread.sleep(getWaittime());
    		} catch (InterruptedException ex) {
    			logger.error(ex.getMessage());
    		}
    		logger.debug("Finished waiting.");
    		return EVAL_PAGE;
    	}
    	
    	public int doStartTag() throws JspException {
    		return SKIP_BODY;
    	}
    }
    Wichtig sind die setter und getter für die Attribute - Namensgleichheit.
    Dann wird doEndTag aufgerufen.

    In der JSP kannst du die Klasse dann folgendermaßen verwenden:
    In der Deklaration der JSP musst du folgendes schreiben:

    Code:
    <%@ taglib uri="/WEB-INF/tlds/taglibdelay.tld" prefix="do" %>
    Dort wo du möchtest, dass der Tag aufgerufen wird:

    Code:
    <do:delay seconds="3"/>
    Wichtiger als eigene TLDS sind aber die commons von Sun. Die haben schon sehr viel Funktionalität. Die von Apache auch.
    Spezialitäten heute: PLSQL, TSQL, Java (alles mit Webanwendungen), Groovy, Grails, ASP.NET, Javascript, Python, Django
    Straight through, ohne Umwege ans Ziel

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •