Publicvoid - Onlinenotes SWOS HS 2011/12. Inhalt Vorstellung Website Probleme - Lösungen Quick...

Preview:

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?

Recommended