4. JEE /JSF / EJB / CDI

Größe: px
Ab Seite anzeigen:

Download "4. JEE /JSF / EJB / CDI"

Transkript

1 4. JEE /JSF / EJB / CDI 4.1 Grundlagen 4.2 Einführendes nulltes Beispiel 4.3 Validierung 4.4 JSF-Lebenszyklus 4.5 JSF mit EJB und JPA 4.6 Detaillierteres Beispiel: Mitarbeiterverwaltung 4.7 Testen von JEE-Programmen 4.8 Templates und Komponenten 209

2 Literatur E.Burns, C. Schalk, JavaServer Faces 2.0: The Complete Reference, Mc Graw Hill, New York, 2010 M. Marinschek, M. Kurz, G. Müllan, JavaServer Faces 2.0, dpunkt, Heidelberg, 2010 (im Wesentlichen auch: D. Geary, C. Horstmann, Core JavaServer Faces, 3. Auflage, Prentice Hall, USA, 2010 Standard: Sun, JSR 344: JavaServer Faces 2.2, M. Çalışkan, O. Varaksin, PrimeFaces Cookbook - Second Edition, Packt Publishing, Birmingham UK, 2015 Oracle, JEE7 Tutorial, Bücher nutzen teilweise Eclipse und JBoss/WildFly; nicht notwendig, funktioniert fast alles mit Netbeans und Glassfish / Apache 210

3 4.1 Grundlagen 211

4 Komponenten und SW-Architektur View View-Repräsentation Fachlogik Controller JSF Scoped Beans Zugriffskoordination Zugriff Fachklassen DB JPA EJB 212

5 HTTP-Ablauf Client: Request get, post, head, put,... URL HTTP1.x Header Info: Accept, Cookie,... Body: Post-Parameter Server: Response Statusmeldung: HTTP1.x 200 OK, oder 404 Error Header Info: Content-type, set-cookie,... Body: Dokument Verbindungsabbau Protokoll ist zustandslos/gedächtnislos; Client wird bei erneutem Request ohne Trick nicht als Bekannter erkannt 213

6 Web-Server mit Container nutzen (JEE) Servlet: Wortkreation aus den Begriffen Server und Applet, (serverseitiges Applet) Web-Server leitet HTTP- Request an Servlet weiter Servlet kann Antwort (HTML-Code) berechnen Servlet kann Anfrage- Informationen und Serverumgebung nutzen Servlet kann mit anderen Servlets kommunizieren Container 214

7 Motivation für JSF Die Widerverwendbarkeit von Servlets ist gering Innerhalb jeder JSP (Java ServerPage) bzw. jedes Servlets müssen ähnliche Schritte ausgeführt werden Nur ein Teil der Applikationslogik kann in Tag-Bibliotheken gekapselt werden Workflow ist in der Applikationslogik versteckt, dadurch schwer nachvollzierbar ab JSF 2.0 sehr flexible Gestaltungsmöglichkeiten, u. a. AJAX- Einbettung Hinweis: wir betrachten nur Grundkonzepte (-> mehr evtl. Semesteraufgabe) 215

8 Web-Server mit JSF- (und EJB-) Unterstützung Beispiele: Apache Tomcat / TomEE BEA WebLogic Server IBM WebSphere (Apache Geronimo) JBoss Wildfly Oracle WebLogic Glassfish (Oracle, Referenzimplementierung) Unterschiedliches Tempo bei der Unterstützung neuer JEE- Versionen 216

9 Konzeptübersicht Web-Seite in XHTML Input-Komponente beschrieben in XHTML... Web-Seite in XHTML Output-Komponente beschrieben in XHTML... event leitet auf Folgeseite liest Modell Java-Programm im Container im Server 217

10 XHTML Idee: HTML nicht XML-konform und zu viele Freiheiten XHTML in fast allen Elementen wie HTML XHTML basierend auf XML-Schema leichter zu verarbeiten Unterschiede zu HTML (Ausschnitt) Tags und Attribute müssen klein geschrieben werden Attributwerte immer in Anführungsstrichen boarder="7" korrekte XML-Syntax: <br/> nicht <br> generell saubere Terminierung <input... /> XHTML2 wegen HTML5 eingestellt (verschwimmt damit) Standard: 218

11 Web-GUI-Komponenten JSF bietet alle klassischen GUI-Komponenten zur Darstellung und Bearbeitung an Grundidee: Komponenten schicken bei Veränderungen Events Nutzung von MVC2 Komponenten als XHTML eingebettet <h:inputtext id="imname" value="#{modul.name} required="true"/> <h:outputtext id="omname" value="#{modul.name}"/> Kontakt zum Java-Programm über Methodenaufrufe (lesend und aufrufend, z. B. modul.setname(...), modul.getname() große Komponenten können aus kleineren komponiert werden 219

12 Elementare Aufgabe: Eingabeseite mit Ausgabeseite Managed public class Modul implements Serializable { private String name; WebSeite ="#{modul.name}" WebSeite ="#{modul.name}" Modulname: Modulnummer: Abschicken Modulname: <Ausgabe> Modulnummer: <Ausgabe> Zur Eingabe Knopf Eingabefeld Ausgabefeld 220

13 Projekt einrichten (1/2) 221

14 Projekt einrichten (2/2) 222

15 4.2 Nulltes JSF-Beispiel (1/11) Aufgabe: Modul (Name + Nummer) eingeben und auf zweiter Seite wieder ausgeben Beispiel zeigt: Konzept der XHTML-Nutzung erste JSF-Befehle Seitenmanövrierung durch JSF 0. Beispiel zeigt nicht: ordentliche Softwarearchitektur (Controller und Model trennen) Validierungsmöglichkeiten für Eingaben Layout-Gestaltung viele weitere coole Dinge 223

16 Nulltes JSF-Beispiel (2/11) - Start index.xhtml <?xml version='1.0' encoding='utf-8'?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " <html xmlns=" xmlns:h=" <h:head> <title>moduleingabe</title> </h:head> <h:body> <h:form id="form" > <h:outputtext value="modulname "/> <h:inputtext id="mname" value="#{modul.name}" required="true"/><br/> <h:outputtext value="modulnummer "/> <h:inputtext id="mnr" value="#{modul.nr}" required="true"/><br/> <h:commandbutton value="abschicken" action="#{modul.uebernehmen}"/> </h:form> </h:body> </html> 224

17 Nulltes JSF-Beispiel (3/11) - Analyse der Startseite Einbinden der JSF-Bibliotheken <html xmlns=" xmlns:h=" xmlns:f =" > Nutzung von Standard XHTML (vereinfacht, da so als Standardnamensraum gesetzt) enge Verwandtschaft HTML zu XHTML (<h:form>) für value="#{modul.name}" offene Fragen: was ist modul? ( -> Managed Bean) warum #? (Trennung von ausführbaren Elementen) was passiert bei modul.name? (set/get abhängig von in/out) Ausblick: action="#{modul.uebernehmen}", echtes Event- Handling (Methodenaufruf) 225

18 Nulltes JSF-Beispiel (4/11) - Ausgabe ausgabe.xhtml <?xml version='1.0' encoding='utf-8'?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " <html xmlns=" xmlns:h=" <h:head> <title>modulausgabe</title> </h:head> <h:body> <h:form id="form"> <h:outputtext value="modulname: "/> <h:outputtext id="mname" value="#{modul.name}"/> <br/> <h:outputtext value="modulnummer: "/> <h:outputtext id="mnr" value="#{modul.nr}"/><br/> <h:commandbutton value="zur Eingabe" action="#{modul.eingeben}"/> </h:form> </h:body> </html> 226

19 Nulltes JSF-Beispiel (5/11) - Managed Bean [1/3] package entities; import java.io.serializable; import javax.enterprise.context.requestscoped; import // nur im Minimalbeispiel hat eine // einen zugeordneten Scope public class Modul implements Serializable { private static final long serialversionuid = 1L; private int nr; private String name; public Modul(){} public Modul(int nr, String name) { this.nr = nr; this.name = name; } 227

20 Nulltes JSF-Beispiel (6/11) - Managed Bean [2/3] public String uebernehmen(){ return "/ausgabe.xhtml"; } public String eingeben(){ return "/index.xhtml"; } public String getname() { return name; } public void setname(string name) { this.name = name; } public int getnr() { return nr; } public void setnr(int nr) { this.nr = nr; } //Manövrieren 228

21 Nulltes JSF-Beispiel (7/11) - Managed Bean // generieren lassen public boolean equals(object object) { if (object==null!(object instanceof Modul)) return false; Modul other = (Modul) object; if (this.nr!= other.nr!this.name.equals(other.name)) return false; return true; // generieren lassen public int hashcode() { int hash = 5; hash = 47 * hash + this.nr; hash = 47 * hash + (this.name!= null? this.name.hashcode() : 0); return hash; public String tostring() {return name+"("+nr+")";} } 229

22 Nulltes JSF-Beispiel (8/11) - web.xml [1/2] Konfigurationsdatei für Servlets (hier benötigt; wird generiert) <?xml version="1.0" encoding="utf-8"?> <web-app version="3.1" xmlns=" xmlns:xsi=" xsi:schemalocation=" <context-param> <param-name>javax.faces.project_stage</param-name> <param-value>development</param-value> </context-param> <servlet> <servlet-name>faces Servlet</servlet-name> <servlet-class>javax.faces.webapp.facesservlet </servlet-class> <load-on-startup>1</load-on-startup> </servlet> 230

23 Nulltes JSF-Beispiel (9/11) - web.xml [2/2] <servlet-mapping> <servlet-name>faces Servlet</servlet-name> <url-pattern>/faces/*</url-pattern> </servlet-mapping> <session-config> <session-timeout> 2 </session-timeout> </session-config> <welcome-file-list> <welcome-file>faces/index.xhtml</welcome-file> </welcome-file-list> </web-app> fehlt z. B. gesamte Fehlercodebehandlung in glassfish-web.xml (Glassfish-spezifisch) steht, wenn existent, z. B. <context-root>/vljsfnulltesbeispiel</context-root> 231

24 Nulltes JSF-Beispiel (10/11) - Projektstruktur 232

25 Nulltes JSF-Beispiel (11/11) - Ergebnis 233

26 beans.xml Datei garantiert korrekte Abarbeitung von Annotationen Datei ist Konfigurationsdatei von Contexts- and Dependency Injection (CDI) einige Teile CDI werden in Veranstaltung nebenbei eingeführt Datei muss in Projekten selbst erzeugt werden <?xml version="1.0" encoding="utf-8"?> <beans xmlns=" xmlns:xsi=" xsi:schemalocation=" bean-discovery-mode="all"> </beans> Wert muss von Hand von annotated auf all gesetzt werden 234

27 beans.xml in NetBeans erzeugen 235

28 Richtige Klassen und Annotationen nutzen! bei Korrekturvorschlägen immer auch richtige Klasse achten, steht nicht immer oben oder ist ausgewählt!!! falsche Klasse führt teilweise zu extrem schwer zu findenden Fehlern Historisch sind diese Klassen oft verwandt und ältere Ansätze werden nicht verschwinden 236

29 Einschub: korrekte Pfadangabe Browser zeigt immer vergangene Seite wenn nicht gewünscht, dann Manövrierungsstring ändern ist etwas langsamer (warum, später genauer) Scope setzen public String uebernehmen(){ return "/ausgabe.xhtml?faces-redirect=true"; } public String eingeben(){ return "/index.xhtml?faces-redirect=true"; } 237

30 Basisprinzip der Applikationssteuerung Im Controller: Aufruf einer Methode vom Rückgabetyp String, auch Parameter nutzbar (dann Klammern) <h:commandbutton value="abschicken" action="#{modul.uebernehmen}"/> Im Modell: public String uebernehmen(){ return "/ausgabe.xhtml"; // Endung weglassbar } Methode kann natürlich abhängig von Variablen unterschiedliche Seiten liefern Beachten: Navigation kann in den Tiefen des Codes verschwinden ( -> Konstanten nutzen, Architektur) gibt XML-basierte Variante Mit public void-methoden wird auf gleicher Seite geblieben 238

31 Lebensdauer von Informationen (Scope) Request Session Application nur ein Aufruf für eine Nutzer- Sitzung solange Zeit aktuelles Deployment läuft Anmerkung: Obwohl es verlockend ist, viele Informationen in Session oder Application zu legen, ist dies wegen Performance verboten (wird gespeichert, evtl. passiviert, hat wilde Referenzen, Zugriff muss ggfls. synchronisiert werden) fehlt: CoversationScoped; im Programm Scope starten und enden 239

32 Scope-Beispiel (1/5) - Bean-Klassen //@Named("modul") //@RequestScoped Modul als einfache Klasse (wichtig!) public class Modul implements Serializable {...// wie = public class ModulRequest public class ModulSession public class ModulApplication extends Modul{} 240

33 Scope-Beispiel (2/5) - Ausschnitt index.xhtml <h:form> <h:panelgrid columns="3" > <h:outputlabel for="mnamer" value="modulname "/> <h:inputtext id="mnamer" value="#{modulr.name}"/> <h:message for="mnamer" /> <h:outputlabel for="mnrr" value="modulnummer "/> <h:inputtext id="mnrr" value="#{modulr.nr}"/> <h:message for="mnrr" /> <!-- auch moduls und modula --> <h:commandbutton value="abschicken" action="#{modulr.uebernehmen}"/> </h:panelgrid> </h:form> 241

34 Scope-Beispiel (3/5) - Ausschnitt ausgabe.xhtml <h:form> <h:messages globalonly="true"/> <h:outputtext value="modulname r: "/> <h:outputtext id="mnamer" value="#{modulr.name}"/> <br/> <h:outputtext value="modulnummer r: "/> <h:outputtext id="mnrr" value="#{modulr.nr}"/><br/> <h:commandbutton value="zur Eingabe" action="#{modulr.eingeben}"/><br/> <!-- auch moduls und modula --> <h:commandbutton value="ausgabe wiederholen" action="#{modulr.uebernehmen}"/> </h:form> 242

35 Scope-Beispiel (4/5) - Ein Nutzer, zwei Klicks 243

36 Nutzer 2 Nutzer 1 Scope-Beispiel (5/5) - Zwei Nutzer Zeit 244

37 ConversationScope (1/4) Entwickler kann selbst Länge der Session bestimmen, damit zwischen RequestScope und SessionScope import javax.enterprise.context.conversation; import javax.enterprise.context.conversationscoped; import javax.inject.inject; public class Scopeanalyse implements Serializable { private String wert; private List<String> liste = new private Conversation conver; Vorgriff auf CDI: Container stellt Conversation-Objekt zur Verfügung 245

38 ConversationScope (2/4) public Scopeanalyse(){} // get- und set-methoden fehlen public void hinzu(){ if(this.conver.istransient()){ this.conver.begin(); } if(this.wert!= null &&!this.wert.trim().equals("")){ this.liste.add(wert); } } // kein String zurueck, da auf gleicher Seite geblieben public void vergiss(){ if (!this.conver.istransient()){ this.conver.end(); } } 246

39 ConversationScope (3/4) <h:head> <title>scope Spielerei</title> </h:head> <h:body> <h:form id="main"> <h:inputtextarea id="ein" value="#{scope.wert}" rows="3"/><br/> <ui:repeat value="#{scope.liste}" var="w"> <h:outputtext value="#{w} "/> </ui:repeat> <br/> <h:commandbutton value="übernehmen" action="#{scope.hinzu}"/> <h:commandbutton value="vergessen" action="#{scope.vergiss}"/> </h:form> </h:body> Anmerkung: mit <ui:repeat> wird über eine Sammlung (scope.liste) iteriert, jeweiliges Objekt in Laufvariable w 247

40 ConversationScope (4/4) Bild jeweils nach dem Klicken 248

41 Ausgabeprobleme: Umlaute und Zeilenumbrüche vor Knopfnutzung danach danach 249

42 Umlaute Text-Encoding Sonderzeichen, wie Umlaute bei Eingaben problematisch wenn konsequent UTF-8 genutzt, dann kein Problem; trifft man öfter nicht an häufig, gerade im MS-Bereich, nur ISO nutzbar nicht ganz sauberer Trick: Eingaben selbst passend umwandeln (läuft ggfls. nicht in Ländern mit nichtlateinischer Schrift) String s1 = new String("äöüÄÖßÜ"); System.out.println(s1); String s2 = new String(s1.getBytes("UTF-8"), "ISO "); System.out.println(s2); String s3 = new String(s2.getBytes("UTF-8"), "ISO "); System.out.println(s3); 250

43 Umlaute saubere Glassfish-Lösung Codierung des Glassfish auf UTF-8 umstellen in glassfishweb.xml <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" " <glassfish-web-app error-url=""> <class-loader delegate="true"/> <locale-charset-info default-locale=""> <locale-charset-map locale="" charset=""/> <parameter-encoding default-charset="utf-8"/> </locale-charset-info> </glassfish-web-app> 251

44 Zeilenumbrüche (1/2) verschiedene Lösungen, alle nicht optimal Konvertierer schreiben <h:outputtext converter="wandel" hier: HTML-Wissen nutzen, genauer CSS <h:inputtextarea id="ein" value="#{scope.wert}" rows="3"/><br/> <div style="white-space: pre-wrap"> <ui:repeat value="#{scope.liste}" var="w"> <h:outputtext value="#{w} "/> </ui:repeat> </div> <h:commandbutton value="übernehmen" action="#{scope.hinzu}"/> <h:commandbutton value="vergessen" action="#{scope.vergiss}"/> 252

45 Zeilenumbrüche (2/2) 253

46 Einschub: IE 9 ggfls. Problem Programm läuft problemlos in Firefox und Chrome in IE 8 gab es auch keine Probleme in IE 9, erfolgt nach Drücken des Knopfes folgende Ausgabe 254

47 Einschub: IE 9 - Lösung Session-Informationen können statt im Server auch im Client gehalten werden entlastet Server, ist aber für Nutzer langsamer Ergänzung in web.xml: <context-param> <param-name>javax.faces.state_saving_method</param-name> <param-value>client</param-value> </context-param> Anmerkung: fehlt systematische Fehleranalyse: NetBeans 6.3.1, Glassfish 4, MS IE 9, MS IE 9 Nutzereinstellungen, Win 7 x64, 255

48 Kein Konstruktor in Managed Beans (Scopes) generell vieles nebenläufig unklar, wann Objektvariablen und andere Objekte genau erzeugt werden Races möglich: Zugriff auf Objekt, das gerade Konstruktor durchläuft alle Scopes können Methoden mit folgenden Annotationen nachdem das Objekt erzeugt wurde; sinnvoll hier Variablen initialisieren; Nutzung statt bevor Scope abläuft (aufräumen); auch wenn Session beendet wird Anmerkung: für kritische Ressourcen sinnvoll Ergänzung zum Aufräumen 256

49 public class Session implements Serializable{ private int zaehler; } public Session(){ System.out.println("Session Konstruktor: " + new Date()); public void init(){ System.out.println("Session PostConstruct: " + new Date()); public void destroy(){ System.out.println("Session PreDestroy: " + new Date()); } public int plus(){ return ++this.zaehler; } 257

50 (2/5) public class Bean implements private Session session; public Bean(){ System.out.println("Bean Konstruktor: " + new Date()); public void init(){ System.out.println("Bean PostConstruct: " + new public void destroy(){ System.out.println("Bean PreDestroy: " + new Date());} public void mach(){ // ohne Rückgabe, dann auf Seite bleiben System.out.println("mach: " + this.session.plus()); } } 258

51 (3/5) index.xhtml <h:body> <h:form id="form"> <h:commandbutton id="b" value="mach" action="#{bean.mach}"/> </h:form> </h:body> Sessiondauer in web.xml <session-config> <session-timeout> 1 </session-timeout> </session-config> 259

52 (4/5) Information: Bean Konstruktor: Mon Oct 30 16:15:53 CET 2017 Information: Session Konstruktor: Mon Oct 30 16:15:53 CET 2017 Information: Bean PostConstruct: Mon Oct 30 16:15:53 CET 2017 Information: Session Konstruktor: Mon Oct 30 16:15:53 CET 2017 Information: Session PostConstruct: Mon Oct 30 16:15:53 CET 2017 Information: mach: 1 Information: Bean PreDestroy: Mon Oct 30 16:15:53 CET 2017 Information: Bean Konstruktor: Mon Oct 30 16:16:16 CET 2017 Information: Bean PostConstruct: Mon Oct 30 16:16:16 CET 2017 Information: mach: 2 Information: Bean PreDestroy: Mon Oct 30 16:16:16 CET 2017 Information: Bean Konstruktor: Mon Oct 30 16:16:26 CET 2017 Information: Bean PostConstruct: Mon Oct 30 16:16:26 CET 2017 Information: mach: 3 Information: Bean PreDestroy: Mon Oct 30 16:16:26 CET 2017 Information: Session PreDestroy: Mon Oct 30 16:18:42 CET 2017 FATAL: JSF1073: javax.faces.application.viewexpiredexception FATAL: viewid:/index.xhtml - Ansicht /index.xhtml konnte nicht wiederhergestellt werden. nach Klick (oder längerem Warten) 260

53 (5/5) kleine Änderung in Bean-Klasse public Bean(){ System.out.println("mach: " + this.session.plus()); System.out.println("Bean Konstruktor: " + new Date()); } möglicher Effekt bei erstem Klick: Warnung: #{bean.mach}: java.lang.nullpointerexception javax.faces.facesexception: #{bean.mach}: java.lang.nullpointerexception 261

54 Erinnerung: Konstanten in Programmen schlecht return "ANZEIGEN"; besser: Konstanten getrennt deklarieren public class Modul implements Serializable{ private final static string ANZEIGEN = "ANZEIGEN";... return ANZEIGEN; Alternativ: Klasse mit Konstanten package konstanten; public class Navigation{ public final static string ANZEIGEN = "ANZEIGEN";... return konstanten.navigation.anzeigen; sumgebungen erlauben dann einfache Suche und Änderung (Refactoring) 262

55 Standardattribut rendered (1/3) JSF-Elemente werden typischerweise ineinander geschachtelt (typische GUI-Idee der Schächtelchen in Schächtelchen) viele (Schachtel-)Elemente haben Attribut rendered; Boolescher Wert, ob Element dargestellt public class Mojo implements Serializable { private boolean jo=true; public Mojo(){} } public boolean getjo() {return jo;} public void setjo(boolean jo) {this.jo = jo;} public String change(){ jo=!jo; return "/index.xhtml"; } 263

56 Standardattribut rendered (2/3) - JSF-Seite <?xml version='1.0' encoding='utf-8'?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " <html xmlns=" xmlns:h=" <h:head> <title>klickklack</title> </h:head> <h:body> <h:form id="f1"> <h:panelgrid id="p1" rendered="#{mo.jo}"> <h:outputlabel value= HS rocks"/> </h:panelgrid> <h:panelgrid id="p2" rendered="#{!mo.jo}"> <h:outputlabel value="os rocks"/> </h:panelgrid> <h:commandbutton action="#{mo.change}" value="press"/> </h:form> </h:body> </html> 264

57 Standardattribut rendered (3/3) 265

58 Strukturierung mit panelgrid / panelgroup mit h:panelgrid können einzelne Komponenten zu einem Block zusammengefasst und einheitlich behandelt werden (ähnlich zu JPanel in Swing) durch columns="3" eine Spaltenanzahl angebbar Ausgabe erfolgt in Tabellenform Elemente werden zeilenweise ergänzt mit h:panelgroup Sammlung ohne Formatierung möglich, auch als Block zusammengefasst, z. B.: <h:panelgrid rendered="#{! empty controller.foren}"> <ui:repeat value="#{controller.foren}" var="f" > </ui:repeat> </h:panelgrid> 266

59 Kommentare (?!) Kommentare In JSF-Seiten <!-- Dies liest eh keiner --> wandern in Ausgabe, Ausdrücke mit #{ } werden ausgewertet Ergänzung in web.xml: <context-param> <param-name>javax.faces.facelets_skip_comments</param-name> <param-value>true</param-value> </context-param> 267

60 Unified Expression Language Zugriff auf Exemplarvariablen und Methoden der Managed Beans zentrale Typen: Zahlen und Strings (können sehr gut verarbeitet und verglichen werden) Schreiben von Werten über set-methoden "#{mo.jo}" Lesen erfolgt über get-methoden, generell Berechnungen möglich, die beim Schreiben keinen Sinn haben "#{!mo.jo}" Bei Methoden mit fest vorgegebener Aufgabe (vorgegebener Signatur), stehen keine Klammern beim Aufruf action="#{mo.change}" sonst ja "#{bean1.machwasmit(bean2)}" Zugriff auf Variablen aus festen Namensraum: Managed Beans und Servlet Parameter JSR 341: Expression Language 3.0, 268

61 Implizite Objekte der EL (Ausschnitt) requestscope (analog sessionscope, applicationscope) Zugriff auf Request-Map des External-Contexts param Zugriff auf Request-Parameter-Map des External-Contexts header Zugriff auf Request-Header-Map des External-Contexts facescontext Zugriff auf den Faces-Context initparam Zugriff auf Kontextparameter der Webapplikation cookie Zugriff auf die Request-Cookie-Map des External-Contexts 269

62 Zusammenspiel von Scopes (1/4) Beispiel: Gemeinsame Erstellung eines Einkaufszettels, jeder kann Zeilen hinzufügen (nur temporärer Speicher im ApplicationScope; Eingabe benötigt nur RequestScope) 270

63 Zusammenspiel von Scopes public class Gedicht implements Serializable{ private List<String> public void init() { this.zeilen = new ArrayList<>(); } public void zeilehinzu(string text) { this.zeilen.add(text); } public List<String> getzeilen() { return this.zeilen; } public void setzeilen(list<string> zeilen) { this.zeilen = zeilen; } } 271

64 Zusammenspiel von public class ViewController private Gedicht gedicht; private String eingabe; public void hinzu(){ this.gedicht.zeilehinzu(eingabe); this.eingabe = ""; } public List<String> gettext() { return this.gedicht.getzeilen(); } public String geteingabe() { return this.eingabe; } public void seteingabe(string eingabe) { this.eingabe = eingabe; } } void-methode bleibt auf gleicher Seite kleiner Trick: get- Methode ohne Exemplarvariable 272

65 Zusammenspiel von Scopes (4/4) <h:head> <title>wg-einkaufszettel</title> </h:head> <h:body> <h:form id="main"> Ihre Eingabe: <h:inputtext id="eingabe" size="30" value="#{vc.eingabe}"/> <h:commandbutton id ="hinzu" value="hinzu" action="#{vc.hinzu}"/> <br/> <ui:repeat var="z" value="#{vc.text}"> #{z} <br/> </ui:repeat> </h:form> </h:body> 273

66 4.3 Validierung/ Fehleingaben im nullten Beispiel (1/2) Eingabe: Fehler wird automatisch unter der bleibender Seite ausgegeben j_idt7 ist interner Name, mname ist unsere id des Eingabefeldes 274

67 Fehleingaben im nullten Beispiel (2/2) Anpassung des Projektstatus (oder Parameter löschen) in web.xml (Development, UnitTest, SystemTest, Production) <context-param> <param-name>javax.faces.project_stage</param-name> <!-- <param-value>development</param-value> --> <param-value>production</param-value> </context-param> Applikation bleibt auf der Seite, keine sichtbare Fehlermeldung im Server-Log: INFO: WARNUNG: FacesMessage(s) wurde(n) in die Warteschlange gestellt, aber möglicherweise nicht angezeigt. sourceid=j_idt7:mname[severity=(error 2), summary=(j_idt7:mname: Validierungs-Fehler: Wert wird benötigt.), detail=(j_idt7:mname: Validierungs-Fehler: Wert wird benötigt.)] 275

68 Direkte Validierungen - einige Möglichkeiten <h:form> <h:panelgrid columns="3" > <h:outputlabel for="mname" value="modulname "/> <h:inputtext id="mname" value="#{modul.name}" required="true" size="8" requiredmessage="nich leer" validatormessage="4 Zeichen"> <f:validatelength minimum="4" maximum="4"/> </h:inputtext> <h:message for="mname" /> <h:outputlabel for="mnr" value="modulnummer "/> <h:inputtext id="mnr" value="#{modul.nr}" required="true" requiredmessage="eingabe notwendig" size="4" convertermessage="normale Zahl"/> <h:message for="mnr" /> <h:commandbutton value="abschicken" action="#{modul.uebernehmen}"/> </h:panelgrid> </h:form> 276

69 Ausgaben beim Drücken von Abschicken 277

70 Globale Fehlermeldungen erzeugen und anzeigen public String uebernehmen() { if (name.equals("ooad")) { FacesContext ctxt = FacesContext.getCurrentInstance(); FacesMessage ms = new FacesMessage(); ms.setseverity(facesmessage.severity_error); ms.setsummary("ooad ist schon da"); ms.setdetail("ooad im Standard"); ctxt.addmessage(null, ms); } return "ANZEIGEN"; } //in ausgabe.xhtml <h:form> <h:messages globalonly="true"/> <h:outputtext value="modulname: "/> 278

71 Validierer selbst gestrickt (1/2) public class Modul implements Serializable {... // Validierungsmethoden können beliebigen Namen haben, // müssen aber die folgende Signatur haben public void pruefe(facescontext context, UIComponent component, Object value) throws ValidatorException { if (((String) value).equals("ooad")) { throw new ValidatorException(new FacesMessage( FacesMessage.SEVERITY_ERROR, "oweh", "ole ole")); } }... Hinweis: wird?faces-redirect=true genutzt, ist zu ergänzen: context.getexternalcontext().getflash().setkeepmessages(true); 279

72 Validierer selbst gestrickt (2/2) in index.xhtml <h:panelgrid columns="3" > <h:outputlabel for="mname" value="modulname "/> <h:inputtext id="mname" value="#{modul.name}" validator="#{modul.pruefe}"/> <h:message for="mname" /> 280

73 Anmerkungen zu vorherigen Folien man kann eigene Validierungsmethoden schreiben man könnte auch hier BeanValidation nutzen (folgt später), muss dies aber selbst zu passenden Ausgaben umwandeln FacesContext ist der zentrale Zugang zu den Innereien von JSF Zugriff bis auf genutzte Servlets mit deren Parametern möglich leider auch eine Art Voodoo-Klasse, da fast die gesamte JSF- Steuerung manipulierbar und so keine JSF-Schicht mehr richtig existiert FacesContext macht Code-Wiederverwendung mit anderen Technologien fast unmöglich; deshalb hier nicht intensiv betrachtet 281

74 4.4 JSF-Lebenszyklus JSF-Klassen: typischer GUI-Aufbau mit Events Hierarchische Baumstruktur der Komponenten, z. B. Intern: Wurzel des Komponentenbaums, Container <h:form> Formular, benötigt zum Daten verschicken <h:panelgrid> Container mit Tabellendarstellung public abstract class UIComponent extends Object implements StateHolder: UIComponent is the base class for all user interface components in JavaServer Faces. The set of UIComponent instances associated with a particular request and response are organized into a component tree under a UIViewRoot that represents the entire content of the request or response. (Oracle Klassendoku) public abstract class UIComponentBase extends UIComponent public class UICommand extends UIComponentBase implements ActionSource2 public class UIOutput extends UIComponentBase implements ValueHolder 282

75 Analyse von FacesContext (1/4) <h:form id="f1"> <h:messages id="m1" globalonly="true"/> <h:panelgrid id="p1" columns="3" > <h:outputlabel id="o1" for="mname" value="modulname "/> <h:inputtext id="mname" value="#{module.modul.name}"/> <h:message id="m2" for="mname" /> <h:outputlabel id="o2" for="mnr" value="modulnummer "/> <h:inputtext id="mnr" value="#{module.modul.nr}"/> <h:message id="m3" for="mnr"/> <h:commandbutton id="c1" value="abschicken" action="#{module.uebernehmen}"/> </h:panelgrid> <h:commandlink id="anz" action="#{module.anzeigen}" > <h:outputtext value="zur Modulübersicht"/> </h:commandlink><br/> <h:commandlink id="intern" action="#{module.intern}" > <h:outputtext value="jsfaufbauinfos"/> </h:commandlink> </h:form> 283

76 Analyse von FacesContext (2/4) private void baum(uicomponent ui, String leer) { System.out.println(leer + ui.getid() + ": " + ui.getrenderertype() +" : " + ui.getclass()); List<UIComponent> com = ui.getchildren(); for (UIComponent u : com) { baum(u, leer + " "); } } public String intern() { FacesContext ctxt = FacesContext.getCurrentInstance(); UIViewRoot vr = ctxt.getviewroot(); if (vr!= null) { System.out.println("Root:" + vr.getviewid()); baum(vr, " "); } else System.out.println("keine Root"); return ANZEIGEN; } 284

77 Analyse von FacesContext (3/4) INFO: Root:/index.xhtml INFO: j_id1: null : class javax.faces.component.uiviewroot INFO: j_idt2: null : class com.sun.faces.facelets.compiler.uiinstructions INFO: j_idt3: null : class com.sun.faces.facelets.compiler.uiinstructions INFO: j_idt4: javax.faces.head : class javax.faces.component.uioutput INFO: j_idt5: null : class com.sun.faces.facelets.compiler.uiinstructions INFO: j_idt6: javax.faces.body : class javax.faces.component.uioutput INFO: f1: javax.faces.form : class javax.faces.component.html.htmlform INFO: m1: javax.faces.messages : class javax.faces.component.html.htmlmessages INFO: p1: javax.faces.grid : class javax.faces.component.html.htmlpanelgrid INFO: o1: javax.faces.label : class javax.faces.component.html.htmloutputlabel INFO: mname: javax.faces.text : class javax.faces.component.html.htmlinputtext INFO: m2: javax.faces.message : class javax.faces.component.html.htmlmessage INFO: o2: javax.faces.label : class javax.faces.component.html.htmloutputlabel INFO: mnr: javax.faces.text : class javax.faces.component.html.htmlinputtext INFO: m3: javax.faces.message : class javax.faces.component.html.htmlmessage INFO: c1: javax.faces.button : class javax.faces.component.html.htmlcommandbutton INFO: anz: javax.faces.link : class javax.faces.component.html.htmlcommandlink INFO: j_idt15: javax.faces.text : class javax.faces.component.html.htmloutputtext INFO: j_idt16: null : class com.sun.faces.facelets.compiler.uiinstructions INFO: intern: javax.faces.link : class javax.faces.component.html.htmlcommandlink INFO: j_idt17: javax.faces.text : class javax.faces.component.html.htmloutputtext INFO: j_idt18: null : class com.sun.faces.facelets.compiler.uiinstructions Grundregel: Layout bleibt statisch; Ein- und Ausblenden durch Attribut rendered 285

78 Analyse von FacesContext (4/4) - Komponentenbaum UIViewRoot HtmlForm HtmlMessages HtmlPanelGrid HtmlOutputLabel HtmlInputText HtmlMessage HtmlOutputLabel HtmlInputText HtmlMessage HtmlCommandButton HtmlCommandLink HtmlOutputText HtmlCommandLink HtmlOutputText 286

79 Speichern der Zustandsinformationen (1/2) Klassische GUI-Komponenten (und Event-Listener) sind zustandsbasiert; HTTP nicht Zustand muss gesichert werden (wie wird in Deployment Descriptor beschrieben) Variante A: auf dem Server (Zuordnung z. B. über Cookies) empfohlen; nicht default bei Netbeans hohe Speicheranforderung Variante B: beim Client <context-param> <param-name>javax.faces.state_saving_method</param-name> <param-value>client</param-value> </context-param> anzuzeigende Seite enthält Zustand in hidden Field 287

80 Speichern der Zustandsinformationen (2/2) Seitenende in generiertem HTML (Ausschnitt): <a id="f1:intern" href="#" onclick="if(typeof jsfcljs == 'function'){jsfcljs(document.forms['f1'],'f1:intern, f1:intern','');}return false">jsfaufbauinfos</a> <input type="hidden" name="javax.faces.viewstate" id="javax.faces.viewstate" value="h4siaaaaaaaaanvxw2wuvrg+o9s7fxrhglnaaiiyu2w7i0hqsif efndb0i1f4kgcnt3bnti3z850bogehtreeqnbek0wavdbb3hrn4jxeh6m JJhI4ouJCTEmxsRLYkxQH9Tzn9mZnd2dbSliopNmembm/875/tt3zl7+E VaBuo+mp7D8zgmY3U2NpGbIyLd9dLnT73RYW6VBYQcHSG0wjRQQtSUmGm sqiwirndui5liqaspsayffoswsqejuzk0evnuwyh41qe/fq4+ugvbamft cm8dhzb1qeroavz2jy6phkvxg6mpivit2oara1zm1ke/cwtjvk0oo0eu5 crjvbjgkk44fu8al+kow8oi1eicxbitkbbzsfjnyz+6pnrq499eu=" /> </form> </body> </html> 288

81 Hintergrund: Abarbeitung von JSF-Anfragen 289

82 Restore View Komponentenbaum (wieder-)herstellen basiert auf nicht sichtbarer Wurzelkomponente Komponentenbaum in FacesContext gespeichert erster Aufruf: JSF-Seite rendern, nicht anzeigen ID-Vergabe und damit Aufbau der internen Struktur Registrieren von Event-Listenern und Validatoren Werte in Komponenten eintragen sonst: zugehörigen Komponentenbaum suchen, bzw. wieder aufbauen (beinhaltet auch Eventlistener, Konvertierer und Backing-Beans) 290

83 Apply Request Values UI-Komponenten mit Anfrageparametern aktualisieren Request-Parameter auslesen (einschließlich JSF 1.2 nur POST) POST-String parsen und filtern Werte dann UI-Komponenten zuordnen (noch nicht prüfen) nutzt Methode processdecodes() für alle Komponenten falls Attribut immediate= true, dann (gleich genauer) für Aktionselemente (Command): konvertieren und validieren überspringen für Eingabeelemente (Input): sofort konvertieren und validieren 291

84 Process Validations Werte konvertieren und validieren Jede UI-Komponente validiert und konvertiert den zugeordneten Wert nutzt Methode processvalidators() der Komponenten automatische Konvertierung für viele Typen; Konvertierer selbst erstellbar (ähnlich zu Validierer) bei Fehler Fehlermeldung in Fehlerliste eintragen und Modellaktualisierung überspringen; zur Ausgabe bei Wertänderung: ValueChangeEvent Anmerkung: Werte noch nicht in Beans 292

85 Update Model Values Werte im Modell (Beans) aktualisieren Typsicherheit durch vorherige Schritte garantiert nutzt Methode processupdates() der Komponenten Werte aktualisieren, durch set-methoden Abbruch bei Fehler 293

86 Invoke Applications Anwendung ausführen an das Ereignis gebundene Aktion ausführen, z. B. Action- Methode nutzt Methode processapplication() der Komponenten arbeitet mit vorher aktualisierten Werten 294

87 Render Response Rendern durch Spezifikation nicht festgelegt Antwort generieren aktuellen Stand des zugehörigen Komponentenbaums ausgeben rekursiver Baumdurchlauf; jeweils Renderer aufrufen (HTML, XTHML, XUL,...) jede Komponente hat Methode der Form encodexxx() abspeichern des Komponentenbaums generierte Seite an Server übergeben, der sie typischerweise an den Browser schickt 295

88 JSF-Lifecycle verfolgen (1/8) Man kann PhaseListener schreiben, die über Phasenänderungen informiert werden wird in faces-config.xml im Ordner WEB-INF festgehalten (neue JSF Faces Configuration) <?xml version='1.0' encoding='utf-8'?> <faces-config version="2.2" xmlns=" xmlns:xsi=" xsi:schemalocation=" <lifecycle> <phase-listener>controller.zeichphasen</phase-listener> </lifecycle> </faces-config> 296

89 JSF-Lifecycle verfolgen (2/8) - index.xhtml <h:form id="form1"> <h:panelgrid id="panel1" columns="3" rules="all"> <h:outputtext id="o1" value="neuer Text"/> <h:inputtext id="i1" value="#{analyse.ein}" required="true"/> <h:message id="m1" for="i1"/> <h:outputtext id="ow1" value="neue Zahl"/> <h:inputtext id="iw1" value="#{analyse.zahl}"/> <h:message id="m1w" for="iw1"/> <h:outputtext id="o2" value="alter Text/Zahl"/> <h:outputtext id="o3" escape="false" value="#{analyse.ein}"/> <h:outputlabel id="ow3" value="#{analyse.zahl}"/> <h:commandbutton id="c1" value="übernehmen" action="#{analyse.uebernehmen}"/> </h:panelgrid> </h:form> 297

90 JSF-Lifecycle verfolgen (3/8) public class Analyse implements Serializable{ private String ein; private int zahl; public Analyse(){} public String uebernehmen(){ return "/index.xhtml"; } } public String getein() {return ein;} public void setein(string ein) {this.ein = ein;} public int getzahl() {return zahl;} public void setzahl(int zahl) {this.zahl = zahl;} 298

91 JSF-Lifecycle verfolgen (4/8) - PhaseListener [1/2] public class ZeichPhasen implements PhaseListener { // Hier angeben, in welchen Phasen dieser Listener genutzt // werden soll, im Beispiel in public PhaseId getphaseid() { return PhaseId.ANY_PHASE; public void beforephase(phaseevent e) { if (e.getphaseid() == PhaseId.RESTORE_VIEW) System.out.println("===geht los"); System.out.println("before: " + e.getphaseid()); zeichanalyse(); } 299

92 JSF-Lifecycle verfolgen (5/8) - PhaseListener public void afterphase(phaseevent e) { System.out.println("after: " + e.getphaseid()); zeichanalyse(); if (e.getphaseid() == PhaseId.RENDER_RESPONSE) System.out.println("===is Schicht"); } } private void zeichanalyse() { FacesContext fc = FacesContext.getCurrentInstance(); Analyse a = fc.getapplication().evaluateexpressionget(fc, "#{analyse}", Analyse.class); System.out.println("A: "+a.getein() +" :: "+ a.getzahl()); } 300

93 JSF-Lifecycle verfolgen (6/8) - Applikationsstart INFO: ===geht los INFO: before: RESTORE_VIEW 1 INFO: A: null :: 0 INFO: after: RESTORE_VIEW 1 INFO: A: null :: 0 INFO: before: RENDER_RESPONSE 6 INFO: A: null :: 0 INFO: after: RENDER_RESPONSE 6 INFO: A: null :: 0 INFO: ===is Schicht Nutzer macht Eingaben 301

94 JSF-Lifecycle verfolgen (7/8) - erfolgreiche Übernahme INFO: ===geht los INFO: before: RESTORE_VIEW 1 INFO: A: null :: 0 INFO: after: RESTORE_VIEW 1 INFO: A: null :: 0 INFO: before: APPLY_REQUEST_VALUES 2 INFO: A: null :: 0 INFO: after: APPLY_REQUEST_VALUES 2 INFO: A: null :: 0 INFO: before: PROCESS_VALIDATIONS 3 INFO: A: null :: 0 INFO: after: PROCESS_VALIDATIONS 3 INFO: A: null :: 0 INFO: before: UPDATE_MODEL_VALUES 4 INFO: A: null :: 0 INFO: after: UPDATE_MODEL_VALUES 4 INFO: A: Zaphod :: 42 INFO: before: INVOKE_APPLICATION 5 INFO: A: Zaphod :: 42 INFO: after: INVOKE_APPLICATION 5 INFO: A: Zaphod :: 42 INFO: before: RENDER_RESPONSE 6 INFO: A: Zaphod :: 42 INFO: after: RENDER_RESPONSE 6 INFO: A: Zaphod :: 42 INFO: ===is Schicht 302

95 JSF-Lifecycle verfolgen (8/8) - falsche Eingabe INFO: ===geht los INFO: before: RESTORE_VIEW 1 INFO: A: Zaphod :: 42 INFO: after: RESTORE_VIEW 1 INFO: A: Zaphod :: 42 INFO: before: APPLY_REQUEST_VALUES 2 INFO: A: Zaphod :: 42 INFO: after: APPLY_REQUEST_VALUES 2 INFO: A: Zaphod :: 42 INFO: before: PROCESS_VALIDATIONS 3 INFO: A: Zaphod :: 42 INFO: after: PROCESS_VALIDATIONS 3 INFO: A: Zaphod :: 42 INFO: before: RENDER_RESPONSE 6 INFO: A: Zaphod :: 42 INFO: after: RENDER_RESPONSE 6 INFO: A: Zaphod :: 42 INFO: ===is Schicht 303

96 Problem: Abbrüche (1/2) in Analyse : public String zuruecksetzen(){ ein=""; zahl=0; return "/index.xhtml"; } in index.xhtml <h:commandbutton id="c2" value="zurücksetzen" action="#{analyse.zuruecksetzen}"/> Problem: Validierung läuft trotzdem 304

97 Problem: Abbrüche (2/2) immediate= true erlaubt Validierung zu überspringen <h:commandbutton id="c2" value="zurücksetzen" immediate="true" action="#{analyse.zuruecksetzen}"/> ===geht los before: RESTORE_VIEW 1 A: Zaphod :: 42 after: RESTORE_VIEW 1 A: Zaphod :: 42 before: APPLY_REQUEST_VALUES 2 A: Zaphod :: 42 after: APPLY_REQUEST_VALUES 2 A: :: 0 before: RENDER_RESPONSE 6 A: :: 0 after: RENDER_RESPONSE 6 A: :: 0 ===is Schicht 305

98 Nutzung von immediate für Eingabefelder immediate=true fordert sofortige Validierung und Konvertierung für diese Komponente <h:inputtext id="i1" value="#{analyse.ein}" immediate="true" validatormessage="nur 3"> <f:validatelength maximum="3"/> </h:inputtext> ===geht los before: RESTORE_VIEW 1 A: null :: 0 after: RESTORE_VIEW 1 A: null :: 0 before: APPLY_REQUEST_VALUES 2 A: null :: 0 after: APPLY_REQUEST_VALUES 2 A: null :: 0 before: RENDER_RESPONSE 6 A: null :: 0 after: RENDER_RESPONSE 6 A: null :: 0 ===is Schicht <Return> im Eingabefeld drücken 306

99 Eineinhalb Schleifen public String uebernehmen(){ return "/index.xhtml?faces-redirect=true"; } // wie vorher INFO: before: INVOKE_APPLICATION 5 INFO: A: Zaphod :: 42 INFO: after: INVOKE_APPLICATION 5 INFO: A: Zaphod :: 42 INFO: ===geht los INFO: before: RESTORE_VIEW 1 INFO: A: Zaphod :: 42 INFO: after: RESTORE_VIEW 1 INFO: A: Zaphod :: 42 INFO: before: RENDER_RESPONSE 6 INFO: A: Zaphod :: 42 INFO: after: RENDER_RESPONSE 6 INFO: A: Zaphod :: 42 INFO: ===is Schicht Ohne Redirect: rein serverseitige Weiterleitung, Client kennt Ziel nicht 307

JSF-Klassen: typischer GUI-Aufbau mit Events

JSF-Klassen: typischer GUI-Aufbau mit Events JSF-Klassen: typischer GUI-Aufbau mit Events Hierarchische Baumstruktur der Komponenten, z. B. Intern: Wurzel des Komponentenbaums, Container Formular, benötigt zum Daten verschicken

Mehr

Analyse von FacesContext(1/4) JSF-Klassen: typischer GUI-Aufbau mit Events. Analyse von FacesContext(3/4) Analyse von FacesContext(2/4)

Analyse von FacesContext(1/4) JSF-Klassen: typischer GUI-Aufbau mit Events. Analyse von FacesContext(3/4) Analyse von FacesContext(2/4) JSF-Klassen: typischer GUI-Aufbau mit Events Hierarchische Baumstruktur der Komponenten, z. B. Intern: Wurzel des Komponentenbaums, Container Formular, benötigt zum Daten verschicken

Mehr

5. JavaServer Faces(JSF)

5. JavaServer Faces(JSF) 5. JavaServer Faces(JSF) Grundlagen Nutzung von JSF-Annotationen Validierung von Eingaben Ausgabe von Fehlermeldungen Auswahl darzustellender Elemente typische elementare Software-Architektur JSF + JPA

Mehr

Standardattribut rendered(2/3) - JSF-Seite. Standardattribut rendered(1/3) Strukturierung mit panelgrid/ Kommentare. Standardattribut rendered(3/3)

Standardattribut rendered(2/3) - JSF-Seite. Standardattribut rendered(1/3) Strukturierung mit panelgrid/ Kommentare. Standardattribut rendered(3/3) Standardattribut rendered(1/3) JSF-Elementewerden typischerweise ineinander geschachtelt (typische GUI-Idee der Schächtelchen in Schächtelchen) viele (Schachtel-)Elementehaben Attribut rendered; Boolescher

Mehr

6. JEE /JSF / EJB / CDI

6. JEE /JSF / EJB / CDI 6. JEE /JSF / EJB / CDI 6.1 Grundlagen 6.2 Einführendes nulltes Beispiel 6.3 Validierung 6.4 JSF mit EJB und JPA 6.5 Get 6.6 Sicherheit 6.7 Weitere JSF-Möglichkeiten 6.8 JSF-Lebenszyklus 6.9 Templates

Mehr

Web-Anwendungen mit JavaServer Faces

Web-Anwendungen mit JavaServer Faces Web-Anwendungen mit JavaServer Faces Seminarunterlage Version: 3.06 Version 3.06 vom 1. September 2016 Dieses Dokument wird durch die veröffentlicht.. Alle Rechte vorbehalten. Alle Produkt- und Dienstleistungs-Bezeichnungen

Mehr

FWP Aktuelle Technologien zur Entwicklung verteilter Java-Anwendungen

FWP Aktuelle Technologien zur Entwicklung verteilter Java-Anwendungen FWP Aktuelle Technologien zur Entwicklung verteilter Java-Anwendungen Sommersemester 2018 Michael Theis, Lehrbeauftragter 2 Servlet API Websockets JSF JAX-WS JAX-RS JMS JAXB JSON-P JEE Enterprise Application

Mehr

5. JavaServer Faces (JSF) / JEE

5. JavaServer Faces (JSF) / JEE 5. JavaServer Faces (JSF) / JEE 5.1 Grundlagen 5.2 Einführendes nulltes Beispiel 5.3 Validierung 5.4 Einschub: Contexts and Dependency-Injection 5.5 JSF mit JPA und JNDI 5.6 Funktionale Erweiterung 5.7

Mehr

Programmierung von Client/Server- Anwendungen

Programmierung von Client/Server- Anwendungen Programmierung von Client/Server- Anwendungen Komponenten des Web-Containers (Java EE) SoSe2015 Prof. Dr. Andreas Schmietendorf 1 Übersicht zur Vorlesung Entwicklung der Java Enterprise Edition Servlets,

Mehr

Komponentenorientierte Software-Entwicklung. Seite 1 / 42

Komponentenorientierte Software-Entwicklung. Seite 1 / 42 Seite 1 / 42 Wiederholung Messaging Java Messaging Service (JMS) Pub/Sub P2P Messaging Middleware XMPP-Protokoll Java API for XML-Processing (JAXP) Java API for XML-Binding Webservices / SOA Simple Object

Mehr

Multimedia im Netz Wintersemester 2012/13

Multimedia im Netz Wintersemester 2012/13 Multimedia im Netz Wintersemester 2012/13 Übung 10 Ludwig-Maximilians-Universität München Multimedia im Netz WS 2012/13 - Übung 10-1 Lösung zu Übungsblatt 08 Ludwig-Maximilians-Universität München Multimedia

Mehr

Ansatz 1: Alle kennen Entitäten-Modell (1/2) Erinnerung: Eine Komponentenarchitektur-Variante. Ansatz 1: Alle kennen Entitäten-Modell (2/2)

Ansatz 1: Alle kennen Entitäten-Modell (1/2) Erinnerung: Eine Komponentenarchitektur-Variante. Ansatz 1: Alle kennen Entitäten-Modell (2/2) Erinnerung: Eine Komponentenarchitektur-Variante Datenbank als zentrale Kommunikationsplattform Ansatz 1: alle Komponenten kennen Entitäten-Modell Ansatz 2: Datenzugriffsschicht kapselt Datenbank Ansatz

Mehr

4. Servlets Ein kleiner Einstieg

4. Servlets Ein kleiner Einstieg 4. Servlets Ein kleiner Einstieg Erinnerung: HTTP und HTML Idee von Web Servern und Containern Erstellung einfacher Servlets (zunächst software technisch übelst unstrukturiert) Literatur: B. Basham, K.

Mehr

Einführung Servlets. JEE Vorlesung Teil 2. Ralf Gitzel

Einführung Servlets. JEE Vorlesung Teil 2. Ralf Gitzel Einführung Servlets JEE Vorlesung Teil 2 Ralf Gitzel ralf_gitzel@hotmail.de 1 Übersicht Wiederholung Hello World Blick in die Details Servlet Programmierung Potentielle Fehler Lernziele Gruppenübung 2

Mehr

Einführung Servlets. JEE Vorlesung Teil 2. Ralf Gitzel

Einführung Servlets. JEE Vorlesung Teil 2. Ralf Gitzel Einführung Servlets JEE Vorlesung Teil 2 Ralf Gitzel ralf_gitzel@hotmail.de 1 Übersicht Wiederholung Hello World Blick in die Details Servlet Programmierung Potentielle Fehler Lernziele Gruppenübung 2

Mehr

Webanwendungen mit Java und JavaServerPages

Webanwendungen mit Java und JavaServerPages Webanwendungen mit Java und JavaServerPages ohne JS und ohne Framework Michael Dienert 24. Februar 2016 Inhaltsverzeichnis 1 model2 mit Netbeans und tomcat 1 1.1 Projekt anlegen.............................

Mehr

JSF 2 - Kompositkomponenten

JSF 2 - Kompositkomponenten THE SOFTWARE EXPERTS JSF 2 - Kompositkomponenten Kompositkomponenten im Einsatz Gerald Müllan IRIAN THE SOFTWARE EXPERTS Agenda Motivation JSF 2-Ressourcenverwaltung Einführung Kompositkomponenten Erweiterte

Mehr

4. JavaServer Faces (JSF) / JEE

4. JavaServer Faces (JSF) / JEE 4. JavaServer Faces (JSF) / JEE 4.1 Grundlagen 4.2 Einführendes nulltes Beispiel 4.3 Validierung 4.4 JSF mit EJB und JPA 4.5 Get 4.6 Sicherheit 4.7 Weitere JSF-Möglichkeiten 4.8 JSF-Lebenszyklus 4.9 Templates

Mehr

JavaServer Faces. JSF die Oberfläche von Java EE 8 JSF - die Oberfläche von Jakarta EE. Michael

JavaServer Faces. JSF die Oberfläche von Java EE 8 JSF - die Oberfläche von Jakarta EE. Michael JavaServer Faces JSF 2.3 - die Oberfläche von Java EE 8 JSF - die Oberfläche von Jakarta EE Michael Müller @muellermi Referent Michael Müller Mehr als 35 Jahre Softwareentwicklung Bereichsleiter Softwareentwicklung

Mehr

Enterprise JavaBeans Überblick

Enterprise JavaBeans Überblick Enterprise JavaBeans Überblick 1. Überblick Komponententechnologien 2. Einführung 3. Enterprise JavaBeans Architektur 4. Ressourcen Management und Primäre Services 5. Java Persistence: Entity Manager 6.

Mehr

JavaServer Faces Ein Arbeitsbuch für die Praxis

JavaServer Faces Ein Arbeitsbuch für die Praxis Bernd Müller JavaServer Faces Ein Arbeitsbuch für die Praxis HANSER Inhaltsverzeichnis Vorwort XI 1 Einleitung 1 1.1 Das Ziel dieses Buches 1 1.2 Der Leser 3 1.3 Das Buch im Netz 4 1.4. Verwendete Software

Mehr

Enterprise Java, Services und Systemintegration MVC (JSR 371) Actionbasierte Web-Anwendungen mit Java EE. Vorstellung

Enterprise Java, Services und Systemintegration MVC (JSR 371) Actionbasierte Web-Anwendungen mit Java EE. Vorstellung Enterprise Java, Services und Systemintegration MVC (JSR 371) Actionbasierte Web-Anwendungen mit Java EE http://www.frotscher.com @thfro thilo@frotscher.com Vorstellung Softwarearchitekt, Entwickler und

Mehr

Benutzeroberflächen mit JSF 2.2

Benutzeroberflächen mit JSF 2.2 Benutzeroberflächen mit JSF 2.2 Studienarbeit zum FWP-Modul Aktuelle Technologien zur Entwicklung verteilter Java-Anwendungen Nikola Topalovic, IB4C Agenda 1 Einführung 2 JSF 2.1 Grundlegendes 2.2 Softwareumgebung

Mehr

Agenda. Einleitung. Einbinden von JSF AJAX Beispiele Komponenten Entwicklung PrimeFaces Praktikum. Was ist JSF Aufbau und Techniken HTML vs.

Agenda. Einleitung. Einbinden von JSF AJAX Beispiele Komponenten Entwicklung PrimeFaces Praktikum. Was ist JSF Aufbau und Techniken HTML vs. JavaServer Faces E-Commerce (WS 2011/12) Fachhochschule Münster FB02 Elektrotechnik und Informatik Referenten: Matthias Wellmeyer, Sven Wermers, Malte Wesker Agenda Einleitung Was ist JSF Aufbau und Techniken

Mehr

<Insert Picture Here> Clean Code in der Java EE - Welt

<Insert Picture Here> Clean Code in der Java EE - Welt Clean Code in der Java EE - Welt Alexander Fox Senior Berater Agenda Dauer ca. 45 Minuten Einführung und Allgemeines zu Clean Code Clean Code in Java Clean-Code

Mehr

Facelets. - der Durchbruch für JavaServer Faces?

Facelets. - der Durchbruch für JavaServer Faces? Facelets - der Durchbruch für JavaServer Faces? Andy Bosch IT-Berater und Projektleiter Autor des JavaMagazins, JavaSpektrums und des ObjektSpektrums SENS-Experte, www.softwareexperts.de Betreiber von

Mehr

Play Framework, MySQL, JPA, HQL, HTML, jquery,

Play Framework, MySQL, JPA, HQL, HTML, jquery, Play Framework, MySQL, JPA, HQL, HTML, jquery, Wer Mit wem Resultat 1.Kunde Schalter: Bibliothekarin Bestimmt,welcher Archivar die Zeitschrift holen geht 2. Schalter: Bibliothekarin Archivar Kontrollübergabe

Mehr

5. JavaServer Faces (JSF)

5. JavaServer Faces (JSF) 5. JavaServer Faces (JSF) 5.1 Grundlagen 5.2 Einführendes nulltes Beispiel 5.3 Validierung 5.4 JSF mit JPA und JNDI 5.5 Kompakt: EJB-SessionBeansund CDI 5.6 Funktionale Erweiterung 5.7 Sicherheit 5.8 Weitere

Mehr

V by WBR1/BFH-TI 2011 by MOU2/BFH-TI

V by WBR1/BFH-TI 2011 by MOU2/BFH-TI Java-Applets Unterlagen zum Modul OOP mit Java V 3.0 2007 by WBR1/BFH-TI 2011 by MOU2/BFH-TI Java-Applets V3.0 2011 by WBR1&MOU2/BFH- TI Lernziele Die Kursteilnehmer sind in der Lage: Möglichkeiten und

Mehr

5.9 JSF-Lebenszyklus. StateHolder

5.9 JSF-Lebenszyklus. StateHolder 5.9 JSF-Lebenszyklus JSF-Klassen: typischer GUI-Aufbau mit Events Hierarchische Baumstruktur der Komponenten, z. B. Intern: Wurzel des Komponentenbaums, Container Formular, benötigt zum Daten

Mehr

Auf dieser und den beiden folgenden Folien wurde jeweils ein neues Objekt der Klasse FigurMalerei erstellt und die angegebene Methode ausgeführt.

Auf dieser und den beiden folgenden Folien wurde jeweils ein neues Objekt der Klasse FigurMalerei erstellt und die angegebene Methode ausgeführt. 432 433 434 435 Auf dieser und den beiden folgenden Folien wurde jeweils ein neues Objekt der Klasse FigurMalerei erstellt und die angegebene Methode ausgeführt. 436 437 438 439 440 441 442 443 Die verkürzte

Mehr

Java - Webapplikationen

Java - Webapplikationen Java - Webapplikationen Bestandteile (HTTP,, JSP) Aufbau (Model View Controller) Datenverwaltung (Java Beans, Sessions) Entwicklung (Projektstruktur, Sysdeoplugin für Eclipse) 17. Januar 2006 Jan Hatje

Mehr

JavaServer Faces 2.2

JavaServer Faces 2.2 D3kjd3Di38lk323nnm Michael Kurz Martin Marinschek JavaServer Faces 2.2 Grundlagen und erweiterte Konzepte 3., vollständig überarbeitete Auflage Michael Kurz / Martin Marinschek, JavaServer Faces 2.2, dpunkt.verlag,

Mehr

Hauptseminar Informatik. Java Web Frameworks Alexander Löser

Hauptseminar Informatik. Java Web Frameworks Alexander Löser Hauptseminar Informatik Java Web Frameworks 14.06.2002 Alexander Löser Gliederung Frameworks Model View Controller Struts Turbine Barracuda Expresso Fazit Hauptseminar Informatik: Java-Web-Frameworks (Alexander

Mehr

Vortrag. Thema: Apache Struts + Tiles

Vortrag. Thema: Apache Struts + Tiles Vortrag Thema: Apache Struts + Tiles Mohamed Haji Julian Cordes Robin Röttger Web 2.0 WS 2014/2015 1 Inhalte 1. Einleitung 2. Grundlegendes mit Struts 3. Apache Tiles (mit Struts) 4. Praktikum 5. Diskussion

Mehr

Fortgeschrittene JSF- Techniken. Ralf Gitzel

Fortgeschrittene JSF- Techniken. Ralf Gitzel Fortgeschrittene JSF- Techniken Ralf Gitzel ralf_gitzel@hotmail.de 1 Themenübersicht Ralf Gitzel ralf_gitzel@hotmail.de 2 Übersicht Navigation Konvertierung von Eingabewerten Verifizierung von Eingabewerten

Mehr

Session Beans & Servlet Integration. Ralf Gitzel

Session Beans & Servlet Integration. Ralf Gitzel s & Servlet Integration Ralf Gitzel ralf_gitzel@hotmail.de 1 Themenübersicht Ralf Gitzel ralf_gitzel@hotmail.de 2 Übersicht Motivation Aufbau einer Stateless s Stateful s Web Client Offene Antwort von

Mehr

Enterprise JavaBeans Überblick

Enterprise JavaBeans Überblick Enterprise JavaBeans Überblick 1. Überblick Java EE 5 und Komponententechnologien 2. Einführung Java EE 5 Plattform 3. Enterprise JavaBeans Architektur 4. Ressourcen Management und Primäre Services 5.

Mehr

Fehleingaben im nullten Beispiel (2/2) 5.3 Validierung/ Fehleingaben im nullten Beispiel (1/2) Ausgaben beim Drücken von Abschicken

Fehleingaben im nullten Beispiel (2/2) 5.3 Validierung/ Fehleingaben im nullten Beispiel (1/2) Ausgaben beim Drücken von Abschicken 5.3 Validierung/ Fehleingaben im nullten Beispiel (1/2) Eingabe: Fehler wird automatisch unter der bleibender Seite ausgegeben j_idt7 ist interner Name, mname ist unsere id des Eingabefeldes Fehleingaben

Mehr

Durch die Möglichkeit, Ein- und Ausgaben auf der Konsole durchzuführen, kann man auch systematisch das Verhalten von Klassen analysieren.

Durch die Möglichkeit, Ein- und Ausgaben auf der Konsole durchzuführen, kann man auch systematisch das Verhalten von Klassen analysieren. Durch die Möglichkeit, Ein- und Ausgaben auf der Konsole durchzuführen, kann man auch systematisch das Verhalten von Klassen analysieren. 267 Das hier skizzierte Problem basiert auf der strategischen Entscheidung

Mehr

Freundliche Eindringlinge. Moderne Web- Applika1onen mit CDI

Freundliche Eindringlinge. Moderne Web- Applika1onen mit CDI Freundliche Eindringlinge Moderne Web- Applika1onen mit CDI Norman Erck Holis1con AG - Management- und IT- Beratung Architektur Agil/Projektmanagement BPM/SOA Berater Architektur ebusiness Web- Technologien

Mehr

Programmierung von Java- Webanwendungen. paluno

Programmierung von Java- Webanwendungen. paluno Programmierung von Java- Webanwendungen Gliederung 1 Vorstellung und Einführung 2 Basiswissen Web 3 XML und JSF- Einführung 4 JSF- Komponenten und RichFaces 5 Wiederholung der ersten Woche 6 JSF- Konzepte

Mehr

Persistenz. Ralf Gitzel

Persistenz. Ralf Gitzel Persistenz Ralf Gitzel ralf_gitzel@hotmail.de 1 Themenübersicht Ralf Gitzel ralf_gitzel@hotmail.de 2 Übersicht Grundkonzepte Entity Beans Meine erste Entity Entity-Manager Lernziele Übungsaufgabe 3 Grundkonzepte

Mehr

FWP Aktuelle Technologien zur Entwicklung verteilter Java- Anwendungen

FWP Aktuelle Technologien zur Entwicklung verteilter Java- Anwendungen FWP Aktuelle Technologien zur Entwicklung verteilter Java- Anwendungen Sommersemester 2015 Michael Theis, Lehrbeauftragter Sommersemester 2015 Michael Theis, Lehrbeauftragter 2 Standard Java-Framework

Mehr

Enterprise JavaBeans Überblick: 17. JavaServer Faces. Created with novapdf Printer (www.novapdf.com). Please register to remove this message.

Enterprise JavaBeans Überblick: 17. JavaServer Faces. Created with novapdf Printer (www.novapdf.com). Please register to remove this message. Enterprise JavaBeans Überblick 1. Überblick Komponententechnologien 2. Einführung 3. Enterprise JavaBeans Architektur 4. Ressourcen Management und Primäre Services 5. Java Persistence: Entity Manager 6.

Mehr

Model-View-Controller

Model-View-Controller Model-View-Controller Seminar Software-Entwurf Leif Singer Gliederung Einordnung Überblick & Geschichte Aufgabenverteilung & Beispiel Model View Controller Zusammenspiel Web Anwendungen

Mehr

JBoss Seam. Ein JEE 5 Webframework. Jörg Wüthrich Infopoint, 4. Februar 2009

JBoss Seam. Ein JEE 5 Webframework. Jörg Wüthrich Infopoint, 4. Februar 2009 JBoss Seam Ein JEE 5 Webframework Jörg Wüthrich Infopoint, 4. Februar 2009 Inhalt Einführung Warum Seam? Zentrale Konzepte Demo Validierung Abschliessende Gedanken 04.02.2009 Infopoint - JBoss Seam - Jörg

Mehr

JSP und Servlet Programmierung

JSP und Servlet Programmierung Seminarunterlage Version: 5.02 Copyright Version 5.02 vom 1. März 2013 Dieses Dokument wird durch die veröffentlicht. Copyright. Alle Rechte vorbehalten. Alle Produkt- und Dienstleistungs-Bezeichnungen

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java Vorlesung vom 18.4.07, Grundlagen Übersicht 1 Kommentare 2 Bezeichner für Klassen, Methoden, Variablen 3 White Space Zeichen 4 Wortsymbole 5 Interpunktionszeichen 6 Operatoren 7 import Anweisungen 8 Form

Mehr

FWP Aktuelle Technologien zur Entwicklung verteilter Java-Anwendungen. Sommersemester Michael Theis, Lehrbeauftragter 1

FWP Aktuelle Technologien zur Entwicklung verteilter Java-Anwendungen. Sommersemester Michael Theis, Lehrbeauftragter 1 FWP Aktuelle Technologien zur Entwicklung verteilter Java-Anwendungen Sommersemester 2017 2017 Michael Theis, Lehrbeauftragter 1 Servlet API Websockets JSF JAX-WS JAX-RS JMS JAXB JSON-P JEE Enterprise

Mehr

Klausur: Java (Liste P)

Klausur: Java (Liste P) Klausur: Java (Liste P) SS05 Erlaubte Hilfsmittel: Gebundene! Unterlagen (Skript mit Anmerkungen, eigene Mitschrift) und maximal ein Buch. Bitte keine losen Blätter. Lösung ist auf den Klausurbögen anzufertigen.

Mehr

Enterprise JavaBeans Überblick: 8. Test-Driven Development. 8.1 Einleitung 8.2 Beispiel 8.3 Anwendung mit Eclipse und dem JBoss Application Server

Enterprise JavaBeans Überblick: 8. Test-Driven Development. 8.1 Einleitung 8.2 Beispiel 8.3 Anwendung mit Eclipse und dem JBoss Application Server Enterprise JavaBeans Überblick 1. Überblick Komponententechnologien 2. Einführung 3. Enterprise JavaBeans Architektur 4. Ressourcen Management und Primäre Services 5. Java Persistence: Entity Manager 6.

Mehr

JSP Übung. JEE Vorlesung Teil 7. Ralf Gitzel

JSP Übung. JEE Vorlesung Teil 7. Ralf Gitzel JSP Übung JEE Vorlesung Teil 7 Ralf Gitzel ralf_gitzel@hotmail.de 1 Übersicht Ralf Gitzel ralf_gitzel@hotmail.de 2 Übersicht Einführung: Aufgaben teilweise zusammengelegt Besprechung der Einzelaufgaben

Mehr

Praktikum aus Softwareentwicklung 2, Stunde 11

Praktikum aus Softwareentwicklung 2, Stunde 11 Praktikum aus Softwareentwicklung 2, Stunde 11 Lehrziele/Inhalt 1. Java Servlet Java Servlet Java Servlets sind auf Java basierende Web-Komponenten. Sie werden von einem Container verwaltet und können

Mehr

4. Servlets Ein kleiner Einstieg. Kurze Java Historie. Erinnerung: Internet Anwendungen. Konzept eines Seitenaufrufs

4. Servlets Ein kleiner Einstieg. Kurze Java Historie. Erinnerung: Internet Anwendungen. Konzept eines Seitenaufrufs 4. s Ein kleiner Einstieg Erinnerung: HTTP und HTML Idee von Web n und Containern Erstellung einfacher s (zunächst software technisch übelst unstrukturiert) Literatur: B. Basham, K. Sierra, B. Bates, Head

Mehr

Enterprise JavaBeans Überblick

Enterprise JavaBeans Überblick Enterprise JavaBeans Überblick 1. Überblick Java EE 5 und Komponententechnologien 2. Einführung Java EE 5 Plattform 3. Enterprise JavaBeans Architektur 4. Ressourcen Management und Primäre Services 5.

Mehr

Diese neuen Gestaltungsmöglichkeiten können nun auf den Web-Anzeigenmarkt angewandt werden: Wissensbaustein»Anzeigenmarkt: CSS-Einsatz«(S.

Diese neuen Gestaltungsmöglichkeiten können nun auf den Web-Anzeigenmarkt angewandt werden: Wissensbaustein»Anzeigenmarkt: CSS-Einsatz«(S. 128 5XHTML&CSS* Wissensbaustein»CSS: ID-Attribut«(S. 180) Wissensbaustein»CSS: Umrandungen«(S. 182) Wissensbaustein»CSS: Füllungen & Abstände«(S. 185) Wissensbaustein»CSS: Pseudo-Klassen & -Elemente«(S.

Mehr

JSP Grundlagen. JEE Vorlesung Teil 5. Ralf Gitzel ralf_gitzel@hotmail.de

JSP Grundlagen. JEE Vorlesung Teil 5. Ralf Gitzel ralf_gitzel@hotmail.de JSP Grundlagen JEE Vorlesung Teil 5 Ralf Gitzel ralf_gitzel@hotmail.de 1 Übersicht Ralf Gitzel ralf_gitzel@hotmail.de 2 Übersicht JSP Konzept Model-View-Controller mit JSPs JSP Expression Language EL Literale

Mehr

JSF Basics. Ralf Gitzel

JSF Basics. Ralf Gitzel JSF Basics Ralf Gitzel ralf_gitzel@hotmail.de 1 Themenübersicht Ralf Gitzel ralf_gitzel@hotmail.de 2 Übersicht Konzepte von JSF Managed Beans Expression Language Grundlegende JSF Tags 3 Konzepte von JSF

Mehr

Servlet-zentrierte Architektur von Web-Anwendungen mit Java Servlets, Java Server Pages (JSPs) und Java Beans

Servlet-zentrierte Architektur von Web-Anwendungen mit Java Servlets, Java Server Pages (JSPs) und Java Beans Projekt Entwicklung verteilter Softwaresysteme mit Web Services SoSe 2008 - Java Server Pages und Servlets - 7. April 2008 Verteilte Systeme und Informationssysteme (VSIS) Department Informatik Universität

Mehr

Praktikum Datenbanken und verteilte Systeme SS Java Server Pages und Servlets -

Praktikum Datenbanken und verteilte Systeme SS Java Server Pages und Servlets - Praktikum Datenbanken und verteilte Systeme SS 2008 - Java Server Pages und Servlets - Verteilte Systeme und Informationssysteme (VSIS) Department Informatik Universität Hamburg Infrastruktur vsispoolx

Mehr

Probleme bei der Nutzung der Bean Validation in JPA

Probleme bei der Nutzung der Bean Validation in JPA Probleme bei der Nutzung der Bean Validation in JPA Die aktuelle Netbeans-Installation 6.9.1 bietet als JPA-Realisierung EclipseLink in der Version 2.0.2, die in der Zusammenarbeit mit der Referenzimplementierung

Mehr

Erste Schritte mit JavaServer Faces und MyEclipse. Allgemeines. Erstellen eines JavaServer Faces Projektes

Erste Schritte mit JavaServer Faces und MyEclipse. Allgemeines. Erstellen eines JavaServer Faces Projektes Erste Schritte mit JavaServer Faces und MyEclipse Dieses Tutorial soll den Einstieg in das noch recht neue Framework, JavaServer Faces (JSF), erleichtern. Es wird Schritt für Schritt eine Beispiel-Anwendung

Mehr

D.18 D.20 D Java-Server-Pages. 4 Java-Server-Pages (2) 4.1 Auszeichnungen. 4.2 Deployment. Nachteil von Servlets

D.18 D.20 D Java-Server-Pages. 4 Java-Server-Pages (2) 4.1 Auszeichnungen. 4.2 Deployment. Nachteil von Servlets 4 Java-Server-Pages Nachteil von Servlets Programmieraufwand für fast vollständig statische Web-Inhalte z.b. lediglich Page-Counter hinzuzufügen z.b. lediglich wenige benutzerspezifischen Teile anzupassen

Mehr

Angriff auf den Platzhirsch

Angriff auf den Platzhirsch Angriff auf den Platzhirsch JSFTemplating, das bessere Facelets? Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim Version: 0.3 www.oio.de info@oio.de Java, XML und Open Source seit 1998 )

Mehr

Erfahrungen und Erkenntnisse. Klaus Richarz, HBT GmbH

Erfahrungen und Erkenntnisse. Klaus Richarz, HBT GmbH Erfahrungen und Erkenntnisse Klaus Richarz, HBT GmbH Java Enterprise Edition 5.0 JBoss Seam Konsequenzen für Realisierung Qualitätssicherung Build & Deployment Fazit & Empfehlungen JBoss Seam in Projekten,

Mehr

Programmieren I + II Regeln der Code-Formatierung

Programmieren I + II Regeln der Code-Formatierung Technische Universität Braunschweig Dr. Werner Struckmann Institut für Programmierung und Reaktive Systeme WS 2016/2017, SS 2017 Programmieren I + II Regeln der Code-Formatierung In diesem Dokument finden

Mehr

DB-Aspekte des E-Commerce Schwerpunkt: Techniken. Servlets und JavaServer Pages

DB-Aspekte des E-Commerce Schwerpunkt: Techniken. Servlets und JavaServer Pages Seminar DB-Aspekte des E-Commerce Schwerpunkt: Techniken Servlets und JavaServer Pages Boris Stumm Servlets und JavaServer Pages 1 Inhalt Einführung Technologie der Servlets und JavaServer Pages Umgebung

Mehr

Übung 1: Object Inspector

Übung 1: Object Inspector Übung 1: Object Inspector Es ist ein System zu entwickeln, mit dem man Objektstrukturen bezüglich ihrer Properties analysieren und dann in einem Tree Viewer (JTree) anzeigen und bearbeiten kann. Properties

Mehr

Schritt 4: Hallo Enterprise Bean

Schritt 4: Hallo Enterprise Bean Prof. Dr. Th. Letschert FB MNI JEE Schritt 4: Hallo Enterprise Bean Einstieg: EJBs erzeugen und nutzen Meine erstes EJB Projekt Enterprise Beans sind eine Backend Technologie, die mit unterschiedlichen

Mehr

Portale mit dem Java-Portlet-Standard JSR168, Jetspeed 2 und WSRP

Portale mit dem Java-Portlet-Standard JSR168, Jetspeed 2 und WSRP Portale mit dem Java-Portlet-Standard JSR168, Jetspeed 2 und WSRP Thorsten Berger Diplomstudiengang Informatik 8. Semester 10. Juli 2005 Einführung 1. Einführung Portal-Begriff Vorteile Software 2. Java-Portlet-Standard

Mehr

JSP und Modell 1 MVC und Modell 2 Java Web Frameworks und Struts Java Server Faces

JSP und Modell 1 MVC und Modell 2 Java Web Frameworks und Struts Java Server Faces Modell 2 und JSF JSP und Modell 1 MVC und Modell 2 Java Web Frameworks und Struts Java Server Faces JSP ein mächtiges Werkzeug! Client JSP Bean Fachlogik JSP Eine JSP empfängt Benutzer-Anfragen, "Requests"

Mehr

Varianten zur Realisierung. Sicherheit. Umsetzungsmöglichkeit in JSF. Applikationsbeispiel -Überblick

Varianten zur Realisierung. Sicherheit. Umsetzungsmöglichkeit in JSF. Applikationsbeispiel -Überblick Sicherheit Vier Aufgaben Authentifizierung: Nutzer erkennen; klassisch über Name und Passwort Autorisierung: Nutzer darf nur bestimmte Aktionen durchführen, klassisch über Rechte-Rollen-System Vertraulichkeit:

Mehr

Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types)

Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types) Stefan Brass: OOP (Java), 22. Aufzählungstypen 1/20 Objektorientierte Programmierung Kapitel 22: Aufzählungstypen (Enumeration Types) Stefan Brass Martin-Luther-Universität Halle-Wittenberg Wintersemester

Mehr

Es wird das Struts <html:options> Element erläutert und anhand von kleinen Beispielen der Umgang veranschaulicht.

Es wird das Struts <html:options> Element erläutert und anhand von kleinen Beispielen der Umgang veranschaulicht. Struts Code Peaces Element Es wird das Struts Element erläutert und anhand von kleinen Beispielen der Umgang veranschaulicht. Allgemeines Autor: Sascha Wolski Sebastian Hennebrüder

Mehr

Eclipse Tomcat Plugin Starthilfe

Eclipse Tomcat Plugin Starthilfe In dieser Starthilfe Installation des Tomcat Plugins Anpassen der Installation Das Tomcat HelloWorld (Servlet) Projekt Hot Code Replacement Eclipse Tomcat Plugin Starthilfe 1.1. Installation Folgende Software

Mehr

Praktikum Datenbanksysteme. Ho Ngoc Duc IFIS - Universität zu Lübeck 01.06.2005

Praktikum Datenbanksysteme. Ho Ngoc Duc IFIS - Universität zu Lübeck 01.06.2005 Praktikum Datenbanksysteme Ho Ngoc Duc IFIS - Universität zu Lübeck 01.06.2005 Tomcat-Installation $JAVA_HOME (z.b. /home/dbp00/j2sdk1.4.2) $CATALINA_HOME (/home/dbp00/jakarta-tomcat-4) Skripte zum Start/Stop:

Mehr

Vorkurs Informatik WiSe 15/16

Vorkurs Informatik WiSe 15/16 Java 7 Dr. Werner Struckmann / Stephan Mielke, Jakob Garbe, 21.10.2015 Technische Universität Braunschweig, IPS Überblick OO in Java Vererbung Abstrakte Klassen und Interfaces 21.10.2015 Dr. Werner Struckmann

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 22 Einstieg in die Informatik mit Java Grundlagen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 22 1 Kommentare 2 Bezeichner für Klassen, Methoden, Variablen 3 White

Mehr

Projektgruppe. Thomas Kühne. Komponentenbasiertes Software Engineering mit OSGi

Projektgruppe. Thomas Kühne. Komponentenbasiertes Software Engineering mit OSGi Projektgruppe Thomas Kühne Komponentenbasiertes Software Engineering mit OSGi Anforderungen der PG IDSE an ein Komponenten- Client Nativer Client Web Client Alternativen IDSE Nutzer Szenario Pipe IDSE

Mehr

Perl-Praxis. CGI-Skripte. Madis Rumming, Jan Krüger.

Perl-Praxis. CGI-Skripte. Madis Rumming, Jan Krüger. Perl-Praxis CGI-Skripte Madis Rumming, Jan Krüger {mrumming,jkrueger}@cebitec.uni-bielefeld.de Übersicht WWW, Web-Server CGI-Skripte Parameterübergabe Web-Formulare CGI.pm Perl-Praxis CGI-Skripte 2/16

Mehr

Programmieren I + II Regeln der Code-Formatierung

Programmieren I + II Regeln der Code-Formatierung Technische Universität Braunschweig Dr. Werner Struckmann Institut für Programmierung und Reaktive Systeme WS 2012/2013, SS 2013 Programmieren I + II Regeln der Code-Formatierung Die hier vorgestellten

Mehr

Einführung. Ralf Gitzel

Einführung. Ralf Gitzel Einführung Ralf Gitzel ralf_gitzel@hotmail.de 1 Übersicht Ralf Gitzel ralf_gitzel@hotmail.de 2 Übersicht JSP Konzept JSP Beispiel Szenario Java Code in JSPs Unsere erste JSP Skriptfreie Seiten JSTL 3 JSP

Mehr

Fallstricke bei der Entwicklung einer JEE6 Anwendung

Fallstricke bei der Entwicklung einer JEE6 Anwendung DOAG 2012 Fallstricke bei der Entwicklung einer JEE6 Anwendung Moritz Lippe www.syntegris.de syntegris information solutions GmbH, Hermannstr. 54-56, 63263 Neu-Isenburg Firmenprofil gegründet am 01. September

Mehr

The Power of JSF 2.0

The Power of JSF 2.0 The Power of JSF 2.0 - Sieben Thesen und Antithesen - Andy Bosch Freier Berater und Trainer Betreiber von www.jsf-forum.de SENS-Experte (www.softwareexperts.de) Was habe ich in den nächsten 45 Minuten

Mehr

Sven Haiges Marcel May. JavaServer Faces. Web Development mit dem Standardframework. entwickier.press

Sven Haiges Marcel May. JavaServer Faces. Web Development mit dem Standardframework. entwickier.press Sven Haiges Marcel May JavaServer Faces Web Development mit dem Standardframework entwickier.press Vorwort 1 Einführung in JavaServer Faces 1.1 Ein paar Zahlen und Hintergründe 1.2 Kompakt: Wesentliche

Mehr

Einsatz und Grenzen von Java Server Faces 2.0

Einsatz und Grenzen von Java Server Faces 2.0 Kai Wähner München 09. September 2010 Einsatz und Grenzen von Java Server Faces 2.0 Einordnung von JSF in JEE 9/11/2010 Seite 2 Einordnung von JSF in JEE 9/11/2010 Seite 3 "Überblick" über JSF 9/11/2010

Mehr

DOKUMENTATION. CaptchaAd mit Java. Entpacken und Hochladen. Die Schritte zur Integration des CaptchaAd-Modul im Einzelnen. Informationen von CaptchaAd

DOKUMENTATION. CaptchaAd mit Java. Entpacken und Hochladen. Die Schritte zur Integration des CaptchaAd-Modul im Einzelnen. Informationen von CaptchaAd CaptchaAd mit Java Stand: 24. September 2012 Damit die Integration von CaptchaAd Ihnen noch leichter fällt, haben wir die notwendigen Schritte in diesem Leitfaden zusammen gefasst. Mit etwas Programmierkenntnissen

Mehr

Institut für Programmierung und Reaktive Systeme. Java 7. Markus Reschke

Institut für Programmierung und Reaktive Systeme. Java 7. Markus Reschke Institut für Programmierung und Reaktive Systeme Java 7 Markus Reschke 14.10.2014 Vererbung in Java Vererbung ermöglicht es, Klassen zu spezialisieren Wiederverwendung vorhandener Klassen Kindsklasse erhält

Mehr