Vorneweg erstmal: XPages sind ein umfangreiches Framework, mit dem sich (komplexe) Web-Anwendungen realisieren lassen, die auf dem Domino-Server gehostet werden. Notes-Datenbanken sind primär Dokumenten-basierte Datenbanken, bieten aus Web-Entwicklungssicht jedoch nur "primitive" Möglichkeiten (mit denen sich jedoch ebenfalls Web-Anwendungen realisieren lassen).
Eine XPages-Applikation kann Daten aus einer Notes-Datenbank verwenden, muss aber nicht. Es können Daten von überall her geholt werden. Eine "Old School" Notes-Datenbank kann das nicht*.
Ein Ajax-Request, gleich welcher Art, benötigt ein "passendes Gegenstück" auf der Serverseite, dass kann aus Sicht einer Notes-Datenbank jedoch alles mögliche sein: Eine Ansicht, ein Agent, eine passende Page, eine Maske... Was auch immer die passende Antwort liefert. XPages bieten neben der Möglichkeit der normalen Ajax-Requests sogenannte "Partial Refreshs", die dazu da sind, definierte Bereiche im Browser neu zu laden, ohne die komplette Seite neu laden zu müssen. Und das Ganze funktioniert dann per Ajax. Als Entwickler muss man sich aber nichts kümmern (senden der Daten an den Server, Generieren der passenden Antwort, austausch des DOM-Baums im Browser) - das macht alles das XPages-Framework.
Zur Grundstruktur:
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
<xp:this.data>
<xp:dominoView
var="view1"
viewName="lu.Data">
</xp:dominoView>
</xp:this.data>
<xp:repeat
id="repeat1"
rows="30"
value="#{view1}"
var="rowEntry">
<xp:label value="#{rowEntry.Form}" />
</xp:repeat>
</xp:view>
Da die Daten anscheinend alle in einer Datenbank vorkommen, wäre die wohl einfachste Möglichkeit, eine passende Ansicht zu bauen, die die Daten entsprechend vorbereitet. Diese Ansicht würde auf der XPage dann als Datenquelle im Bereich
xp:this.data eingebunden werden. So ist das "M(odel)" vom MVC-Pattern in der Applikation eingebunden.
Die Darstellung der Daten aus der View wird im Element
xp:repeat vorgenommen. Das RepeatControl ist eines der großen Errungenschaften für die Notes-Entwicklung, den es besagt, dass der darin enthaltene Code solange neu berechnet werden soll, wie es Werte gibt. Kann man sich als For-Schleife vorstellen, die die Elemente darin beliebig of wiederholt. Die "Werte" sind die einzelnen Einträge der Datenquelle (der Ansicht), und das Element
xp:label gibt die Werte der Spalte
Form aus. Womit wir das "V(iew)" haben.
Hier werden keine Daten hin und her geschickt, daher fällt das "C(ontroller)" in diesem Beispiel flach.
Wie ist das Zusammenspiel zwischen SSJS und CSJS?
SSJS ist eine Möglichkeit, Code auf dem Server zu generieren. CSJS ist der Code, der im Browser ausgeführt wird. Das Zusammenspiel ist letztlich wie bei einer "normalen" Webseite zu sehen.
Wie ist sowas bei XPages möglich?
Abgesehen von den x-tausend Varianten, die hierbei denkbar sind, wäre eines der einfachsten Beispiele der Pager.
Wenn man folgendes zu dem Beispiel oben hinzufügt...
<xp:pager
layout="Previous Group Next"
partialRefresh="true"
id="pager1"
for="repeat1">
</xp:pager>
... erhält man eine "Blätter"-Funktion, mit der man die einzelnen Seiten der Ansicht per Ajax durchblättern kann.
Ich hoffe, hier ein bischen Licht ins Dunkel gebracht zu haben. Für weitergehende Mentoring-Fragen rund um das Thema "XPages" stehe ich gerne zur Verfügung.
*: Die unglaublichen Workarounds und Krämpfe, die man unternehmen muss, um das doch hinzubiegen (und die in keinem Verhältnis von Aufwand/Nutzen stehen) sind die goldenen Ausnahmen