Upload
jurian-leinweber
View
108
Download
0
Embed Size (px)
Citation preview
Publicvoid - OnlinenotesSWOS HS 2011/12
kalik1, messu2, joosp1, stahm3
2
Inhalt
•Vorstellung Website•Probleme - Lösungen•Quick & easy
kalik1, messu2, joosp1, stahm3
3
Vorstellung Website
Onlinenotes
kalik1, messu2, joosp1, stahm3
4
Problem
(Primefaces) AJAX Update
•Notiz Detail (Komponente id=“noteDetail”) wurde nicht aktualisiert obwohl:
<p:ajax event="rowSelect" update=“noteDetail " />
<h:panelGroup id=„noteDetail"> …</panelGroup>
kalik1, messu2, joosp1, stahm3
5
Lösung
•Komponenten ID‘s werden im HTML Output verschachtelt generiert.Also z.B. id=„form:komponente1:komponente2“
•ID‘s müssen verschachtelt angegeben werden
•Alle Komponente mit ID‘s vergeben, sonst werden generische ID‘s erstellt
kalik1, messu2, joosp1, stahm3
6
Problem
Objektübergabe auf eine andere Seite
•Per URL Parameter und auf der neuen Seite mit diesem das Objekt aus der DB holen?
• In ein Hidden-Field und dann posten?• In der action des aktuellen Beans
probieren direkt über den Setter das Objekt im anderen Bean zu setzen?
•…
kalik1, messu2, joosp1, stahm3
7
Lösung
•Innerhalb h:commandButton und h:commandLink können sogenannte PropertyActionListener angegeben werden um Daten mitzugeben.
<f:setPropertyActionListener
value="#{overviewBean.selectedNote}„
target="#{noteBean.currentNote}" />
kalik1, messu2, joosp1, stahm3
8
Problem
Aktualität der Objekte / Scope Problem
•Änderungen an Objekten / Beans wurden nicht überall übernommen und die alten Daten wurden angezeigt führt zu Inkonsistenzen
z.B. Anzahl Notes in einem Notebook
kalik1, messu2, joosp1, stahm3
9
Lösung
•JPA Cache disablen persistence.xml Cache Shared cache mode: NONE
kalik1, messu2, joosp1, stahm3
10
Problem
JPA Cascade Options
•Beim Löschen einer Note wurde praktisch alle Daten der DB gelöscht, d.h. alle anderen Notizen, der User, die Notebooks.
•Fehler wurde zuerst im BackingBean vermutet…
kalik1, messu2, joosp1, stahm3
11
Lösung
•In JPA kann definiert werden, welche Actions als Cascaded ausgeführt werden sollen.
•Diese Option war für alle Modelle auf „All“ gesetzt. Kettenreaktion
•Individuell pro Modell und Property einstellen!
kalik1, messu2, joosp1, stahm3
12
Problem
URL bleibt die selbe nach Wechsel aufandere Seite
•Mit <h:commandButton value="create note" action="notes" /> sollte man auf die Seite notes.xhtml kommen.
•Der Inhalt erscheint zwar von notes.xhtml, jedoch ist die URL immer noch die alte.
kalik1, messu2, joosp1, stahm3
13
Lösung
•Ist in JSF so, da default mit POST gearbeitet wird.
•Alternativ mit GET arbeiten Komplizierter zu Implementieren
kalik1, messu2, joosp1, stahm3
14
Quick & easy
Input Validator (1)1. Klasse erstellen die Validator
implementiert2. Methode „validate“ implementieren
1. Validierungslogik erstellen2. Wenn NOK: FacesMessage für
Fehlermeldung erstellen und ValidatorException(message) werfen.
kalik1, messu2, joosp1, stahm3
15
Quick & easy
Input Validator (2)3. Validator im faces-config.xml
registrieren
4. z.B. innerhalb <h:inputText></h:inputText> einbinden:
<f:validator validatorId=„...PasswordValidator" />
kalik1, messu2, joosp1, stahm3
16
Quick & easy
Converter (1)1. Klasse erstellen die Converter
implementiert2. Methode „getAsObject“
implementieren1. Ein String Repräsentant des Objekts in
das effektive Objekt umwandeln3. Methode „getAsString“ implementieren
1. Das Objekt in ein String Repräsentant umwandeln
kalik1, messu2, joosp1, stahm3
17
Quick & easy
Converter (2)3. Converter im faces-config.xml
registrieren
4. z.B. bei einem Select-Element einbinden:<h:selectOneMenu … converter="#{notebookConverter}">
…</h:selectOneMenu>
kalik1, messu2, joosp1, stahm3
18
Quick & easyTemplating (1)1. Template (z.B. temp.xhtml) erstellen2. Facelets Namespace registrieren in HTML-
Tag3. Ersetzbare Content-Bereiche markieren mit
<ui:insert name="PageContent" />4. Auf der effektiven Content-Seite Template
einbinden<ui:composition template="temp.xhtml"> …</ui:composition>
kalik1, messu2, joosp1, stahm3
19
Quick & easy
Templating (2)5. Innerhalb <ui:composition> können nun
die Content-Blöcke definiert werden mit <ui:define name=" PageContent ">
CONTENT</ui:define>
kalik1, messu2, joosp1, stahm3
20
Fragen?