08.09.2012

JEE6 Tutorial - Part 7 - Daten aus Datenbank auslesen und auf des JSF-Seite anzeigen

In 7. Teil des Tutorials werden die in der Datenbank abgelegten URLs mittels einer Query ausgelesen und über das EJB und das Backing Bean an die JSF-Seite weiterleitet und in einer dataTable angezeigt.

Um das zu erreichen wird zuerst die Klasse UrlManagerBean erweitert. Dort ergänzen wir eine Methode getUrls(), die eine Query an den EntityManager absendet und alles UrlManagerEntitys ausliest. Aus diesen extrahieren wir die URLs und speichern die in einer Liste ab, die als return-Wert zurückgegeben wird.

package org.hameister.urlmanager;

import java.util.ArrayList;
import java.util.List;
import javax.ejb.Stateless;
import javax.inject.Named;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

/**
 *
 * @author Hameister
 */
@Stateless
@Named
public class UrlManagerBean {

    @PersistenceContext
    EntityManager em;

    public void addUrl(UrlManagerEntity entity) {
        System.out.println("Added");
        em.persist(entity);
    }

    public List<String> getUrls() {
        List<String> urls = new ArrayList<String>();

         Query query = em.createQuery("SELECT url FROM UrlManagerEntity url");
         List<UrlManagerEntity> resultList = query.getResultList();
         for(UrlManagerEntity entity : resultList) {
             urls.add(entity.getUrl());
         }
        return urls;
    }
}

Als nächstes wird die Klasse UrlManagerPM um die Methode getUrls() erweitert. Die Methode leitet die Anfrage einfach weiter an das Bean, welches die Liste mit URLs liefert.

package org.hameister.urlmanager;

import java.util.List;
import javax.ejb.EJB;
import javax.enterprise.context.RequestScoped;
import javax.inject.Named;

/**
 *
 * @author Hameister
 */
@Named
@RequestScoped
public class UrlManagerPM {

    private UrlManagerEntity entity = new UrlManagerEntity();

    @EJB
    UrlManagerBean bean;

    public UrlManagerEntity getEntity() {
        return entity;
    }

    public void setEntity(UrlManagerEntity entity) {
        this.entity = entity;
    }

    public void store() {
        System.out.println("Stored");
        bean.addUrl(entity);
    }


    public List getUrls() {
        return bean.getUrls();
    }
}

Was jetzt noch fehlt, ist die Anzeige der URLs auf der JSF-Seite. Deshalb wird die Datei index.xhtml um folgende Zeilen erweitert:

<?xml version='1.0' encoding='UTF-8' ?>
<!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"
      xmlns:h="http://java.sun.com/jsf/html">
    <h:head>
        <title>URLManager</title>
    </h:head>
    <h:body>
        <h:form>
            Bitte URL eintragen:
            <h:inputText value="#{urlManagerPM.entity.url}"/>
            <h:commandButton value="Add" action="#{urlManagerPM.store()}" />
        </h:form>

        <h:dataTable value="#{urlManagerPM.urls}" var="url">
            <h:column>
    		#{url}
            </h:column>
        </h:dataTable>
    </h:body>
</html>

Die Zeilen 15-19 sorgen dafür, dass die URLs beim Presentation Model abgefragt und in einer dataTable angezeigt werden.

Im letzten Teil des Tutorials gibt es eine kleine Zusammenfassung und ein Fazit zum Thema JEE6. Zusammenfassung und Fazit.