Zurück im Leben

Nun, ich habe nicht nur einen schrecklichen Unfall überlebt; noch ein bischen Geduld und ich bin hoffentlich wieder komplett hergestellt. Zeit um über einen Lebenszyklus zu schreiben. Und zwar den von JSF. Allerdings gibt es heute keinen Artikel, der alles im Detail beschreibt, sondern eine Anleitung, selber herauszufinden, wann denn was passiert. Continue reading “Zurück im Leben”

Interaktive Buchliste

Sie ist zwar noch nicht fertig, die interaktive Buchliste meiner Rezensionen, aber immerhin soweit, dass ich sie online gestellt habe: it-rezension.de. Entwicklelt als JSF-Applikation mit NetBeans, werde ich auch über die Internas berichten. Ein erster Anfang war mein letzter Artikel über die vereinfachte Form der Sprachumschaltung. Weitere Artikel folgen.

JSF: Schnelle Umschaltung der Anzeigesprache

Wenn Sie im Internet suchen, werden Sie diverse Lösungen zur Umschaltung der Anzeigesprache einer Web-Applikation (JSF) finden. Ich möchte die vielleicht kürzeste beitragen 😉

Wenn Sie die angebotenen Sprachen in ihrer Muttersprache aneigen, so ist keine Übersetung erforderlich. Die Sprachcodes übergeben Sie nun einfach als Parameter. In Ihrer JSF-Seite reicht dann dieser Code-Schnipsel (Ersetzen Sie den commandBotton bei Bedarf durch commandLink oder anderes):

<h:commandButton action="#{tool.changeLang('de')}" immediate="true" value="Deutsch"/>
<h:commandButton action="#{tool.changeLang('en')}" immediate="true" value="English"/>
<h:commandButton action="#{tool.changeLang('fr')}" immediate="true" value="Français"/>

Und in Tool.java benötigen Sie diese kurze Methode:

public String changeLang(String langCode) {
       FacesContext.getCurrentInstance().getViewRoot().setLocale(new Locale (langCode));
       return null;
}

Das war’s.

Tutorial Webentwicklung (mit JSF) – Applikation “Rezensionen”, Teil I

In meinem Blog liste ich u.a. die von mir rezensierten Bücher. Dabei wird jedes Buch in tabellarischer Form aufgeführt.

Zu jedem Buch werden diese Informationen dargestellt:

  • Titel
  • Untertitel
  • Autor(en)
  • Verlag
  • Jahr
  • Sprache
  • ISBN
  • Kurztext
  • Verweis auf die Rezension(en)

Die Pflege erfolgt manuell und muss in jeder Kategorie bzw. Anzeigesprache eigens erstellt werden. Eine Änderung der Darstellung ist mit hohem Aufwand verbunden.

Es soll nun eine mehrsprachige Anwendung zur Darstellung der rezensierten Bücher entwickelt werden. Ziel ist, die Bücher in unterschiedlichen Anzeigesprachen sowie in unterschiedlichen Kategorien darzustellen. Dabei soll ein Buch durch Zufügen einer Kategorie in derselben gelistet werden. Die Darstellung selbst soll austauschbar gestaltet werden. Sie wird an zentraler Stelle gepflegt und automatisch für alle Bücher genutzt.
Continue reading “Tutorial Webentwicklung (mit JSF) – Applikation “Rezensionen”, Teil I”

JSF, Pflichfelder markieren

Kennen Sie dies nicht? Sie haben eine Applikation mit diversen Dialogen, in denen jeweils sowohl Pflicht- als auch optionale Felder enthalten sind. Damit diese beiden Typen für den Anwender unterscheidbar sind, sollen die Pflichfelder markiert werden. Und dass ganze an einer zentralen Stelle, z.B. als Teil eines Templates. Die dahinter liegende Idee ist recht einfach: Vor der Auslieferung an den Browser werden alle Label geprüft, ob die zugehörigen Eingabefelder Pflicht sind. Falls ja, erfolgt die Markierung. Continue reading “JSF, Pflichfelder markieren”

Tutorial Webentwicklung (mit JSF) VII: Backstage

Backstage

[Dieser Artikel ist noch in Bearbeitung und daher unvollständig]

Bei einer traditionellen Anwendung ist es in der Regel so, dass die Applikation selbst für die Darstellung verantwortlich ist. Auch wenn Sie dafür eines Severdienstes wie X bedienen sollte, so obliegt die Steuerung dennoch dem Programm.

Anders bei einer Webapplikation. Hier werden die Daten an einen Browser übergeben, der sich um die Darstellung kümmert. Dazu verpackt der Server den darzustellenden Inhalt in ein (X)HTML-Dokument. Daneben kann der Server noch ein paar Darstellungsinformationen in Form von CSS mitliefern. Alles Weitere ist dann Sache des Browsers. Und so wie es unterschiedliche Browser gibt, kann sich auch die Darstellung unterscheiden. Die stetige Weiterentwicklung der Standards sorgt hier glücklicherweise für eine allmähliche Angleichung. Hält hier der Anwender aber ein lokales CSS vor, so kann die Darstellung wieder anders ausfallen.

Nicht nur, dass eine Webapplikation die Ausgabe an den Browser delegiert; sie wird auch nicht von selbst aktiv! Erst wenn der Anwender via Browser eine Seite anfordert, so liefert die Applikation eine solche aus. Die (scheinbar) aktive Änderung von Inhalten aufgrund von severseitiger Verarbeitung geht nicht ohne weitere Hilfsmittel. Hier lautet das Stichwort AJAX (Asynchronous JavaScript and XML). Womit wir neben (X)HTML und CSS bei einer weiteren browserseitigen Technik angelangt sind: JavaScript. Der Browser fordert zwischendurch mittels JavaScript immer wieder mal mittel pertiellem Request ein paar Daten an und tauscht Teile des Browserinhalts aus. Somit entsteht zumindest zum Teil der Eindruck, der Server aktualisiere den Bildschirm. Tatsächlich geht hier aber immer wieder eine Anfrage vom Client aus (pull). Ein echtes Push, also die vom Server veranlasste aktive Änderung der Darstellung erfordert einen tieferen Griff in die Trickkiste. Hier wird die Antwort an den Client künstlich verzögert, um zu einem späteren noch Informationen übermitteln zu können. Doch dies ist etwas für einen späteren Teil.

Bei einer traditionellen Applikation kann das Programm sofort auf eine Anwendereingabe reagieren. Bei einer Webapplikation bekommt das Programm erst dann etwas von den Anwendereingaben mit, wenn eine neue Seite oder – meist in Verbindung mit AJAX – patriell eine neue Seite angefordert wird. Zu diesem Zeitpunkt können bereits Eingaben in diversen Feldern erfolgt sein. Nicht schwer vorzustellen, dass die Applikation hiermit etwas anders umgehen muss. An dieser Stelle unterstützt JSF den Anwender und löst auf dem Server für die einzelnen Eingaben entsprechende Events aus, so dass sich ein dem Entwickler nicht ganz fremdes Programmiermodell ergibt.

Und noch ein Unterschied: Eine Webapplikation läuft meist in einer Ablaufumgebung, die ihr zahlreiche Dienste zur Verfügung stellt. Eine solche Ablaufumgebung wird als Container beszeichnet, im Falle von JSF ist dies ein sogenannter Servlet-Container. Dies deutet auf die zugrunde liegende Technik der Servlets hin. Auch bei der Entwicklung mit JSF kann die direkte Nutzung von Servlets hier und da angebracht sein. Es kann also nicht schaden, wenn Sie sich auch mit dieser Technik vertraut machen. Mehr dazu in einem späteren Teil.

Der Servlet -Container versorgt die Applikation mit Schnittstellen zu anderen Diensten. Er ist Bestandteil eines Applikations- oder auch Webservers. Zahlreiche Server beinhalten im Wesentlichen einen Container und so werden die Begriffe Container und Applikationsserver häufig synonym genutzt. Tatsächlich kann ein Server jedoch mehrere Container beherrbergen. So z.B., GlassFish, der neben Dem Servlet-Container u.a. Auch einen EJB-Container beherrbergt. Im Folgenden schauen wir von außen auf den Applikationsserver.

Wenn nun ein Anwender die Web-Applikation nutzen möchte, so ruft er in seinem Browser die URL der Anwendung auf. Der Client startet eine Anfrage an den Server. Dieser erkennt anhand der URL, dass er nicht einfach eine statische Seite ausliefern muss, sondern leitet die Anfrage über den Container an die Applikation weiter. Dort wird diese verarbeitet. Die Ausgabe wird als (X)HTML-Dokument genertiert und an den Browser verschickt. Dieser zeigt die Daten an.

<Abbildung fehlt noch>

Bei dieser Sichtweise betrachten wir den ApplicationServer al BlockBox. Interessant ist aber auch, was darin passiert. Erinnern Sie sich kurz an die bisherigen Anwendungen: Hier haben Sie jeweils eine JSF-Seite definiert. Als Seitensprache wurden Facelets eingesetzt. Jede Seite bestand neben HTML auch aus bestimmten Tags, wie beispielsweise “f:InputText”. Im Browser haben jeweils die URL einer solchen Seite angegeben. Entweder direkt oder indirekt als Angabe der Applikations-URL, die aber intern auf eine konkrete Seite verwiesen hat.

Der Server bestimmt anhand der URL die darzustellende Seite, analysiert deren Inhalt und löst die Tags auf. Im einfachsten Fall werden diese durch entsprechende Daten ersetzt. Die so entstandene Seite wird an den Browser geschickt. Dies ist aber lediglich eine vereinfachte Darstellung. Der Browser könnte ja bereits vorher Daten der Aplikation angezeigt haben. Daher prüft JSF als erstes, ob bereits eine Session besteht. Falls ja wird der Komponentenbaum, die logische Abbildung der dazustellenden Inhalte, wieder hergestellt. Eingaben werden validiert und Datenfelder upgedatet. Insgesamt unterscheidet hier JSF sechs verschiedene Phasen.

JSF: Einfügen einer variablen Anzahl von Dateien

Außerhalb meines Tutorials, und daher entsprechend komprimiert, möchte ich an dieser Stelle über aktuelle Erfahrungen mit JSF berichten.

In einer WebApplikation kann sich der Anwender für diverse Dienste (Features) registrieren. Nach dem Einloggen erscheint eine Übersichtsseite, die ggf. zu einzelnen Features Informationen bereit stellt. Dazu verfügt die Anwendung über eine Bean, die als SessionController die gewählten Features via Fabrik instanziiert. Jedes Feature soll nun bei Bedarf selber einen Teil (Part) der Übersichtsseite zur Verfügung stellen. Da ein Part beliebig viele Komponenten umfassen darf, sind diese jeweils als <ui:composition> in einer eigenen Datei abgelegt. Die Idee war nun, via SessionController eine dynamische Liste der Dateinamen zur Verfügung zu stellen. Diese Liste sollte nun in einer Schleife <ui:repeat> abgearbeitet werden und mittels <ui:include> die Dateien einbinden:

<ui:repeat value="#{sessionController.parts}" var="part">
  <ui:include src="#{part}"/>
</ui:repeat>

Continue reading “JSF: Einfügen einer variablen Anzahl von Dateien”

Tutorial Webentwicklung (mit JSF) VI: Schablonen

Schablonen

Im voherigen Teil dieses Tutorials haben wir eine zweite Seite erstellt, die in ihrem Aufbau der ersten gleicht. Nun geht es darum, die gemeinsamen Teile auch gemeinsam zu nutzen. Wir werden daher eine Schablone (template) erstellen, welche die gemeinsamen Elemente enthält und in die von den einzelnen Seiten einfach der individuelle Teil hinein kopiert wird.

Zur Erinnerung, hier nochmals der Quelltext der beiden Seiten:
Continue reading “Tutorial Webentwicklung (mit JSF) VI: Schablonen”

Tutorial Webentwicklung (mit JSF) V: Szenenwechsel

Szenenwechsel

Der einfache Rechner funktioniert soweit ganz gut. Nach Eingabe der beiden Parameter und Betätigung einer der Schaltflächen für die Grundrechenarten wird das Resultat unmittelbar darunter ausgegeben. Dies ist gut so, soll der Anwender doch auf der Seite bleiben und weiter rechnen. Es gibt aber durchaus Anwendungen, die aus einer Vielzahl von Seiten bestehen. Denken Sie beispielsweise an ein Buchungsystem oder einen Shop. Nach Abschluß der gewünschten Transation erhalten Sie meist eine Buchungsbestätigung auf einer separaten Seite. Dies möchte ich Ihnen anhand unseres Rechners demonstrieren: Das Ergebnis der Addition wird auf einer separaten Seite angezeigt. Von dort können Sie per Knopfdruck wieder zum Rechner gelangen. Nicht unbedingt anwenderfreundlich, aber hier geht es ja darum, erste Möglichkeiten der Seitennavigation kennen zu lernen.

Continue reading “Tutorial Webentwicklung (mit JSF) V: Szenenwechsel”

Tutorial Webentwicklung (mit JSF)

Nun habe ich schon eine ganze Weile keinen Artikel zu meinem Tutorial verfasst. Wer meine Kurznachrichten auf Twitter verfolgt hat, ist informiert, dass ich momentan am Institut ein hohes Arbeitsaufkommen zu bewältigen habe. Dennoch möchte ich ein aktuelles Feedback von Andreas Schlappig, der das Tutorial als hilfreich bezeichnet hat (obwohl es erst ein paar Grundlagen aufzeigt) und mich auf einige Tippfehler aufmerksam machte, zum Anlass nehmen, hier kurz mitzuteilen, wann es weiter geht: Voraussichtlich ab Mitte April kann ich wieder ein wenig am Tutorial arbeiten. Und ich hoffe, dass dies mit der Vertiefung des Themas weiterhin interessant bleibt.