Das Auslösen eines Ereignisses vom Typ Server sendet den entsprechenden JavaScript-Code und den XPage-Kontext an einen Interpreter auf dem Web-Server.
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
<xp:inputText id="inputText1" value="#{requestScope.x}">
<xp:this.converter><xp:convertNumber type="number"></xp:convertNumber></xp:this.converter>
</xp:inputText><xp:span> x</xp:span><xp:br></xp:br>
<xp:inputText id="inputText2" value="#{requestScope.y}">
<xp:this.converter><xp:convertNumber type="number"></xp:convertNumber></xp:this.converter>
</xp:inputText><xp:span></xp:span> y<xp:br></xp:br><xp:span></xp:span>
<xp:inputText id="inputText3" value="#{requestScope.z}">
<xp:this.converter><xp:convertNumber type="number"></xp:convertNumber></xp:this.converter>
<xp:eventHandler event="onclick" submit="true" refreshMode="complete">
<xp:this.action>
<![CDATA[#{javascript:requestScope.z = requestScope.x + requestScope.y}]]>
</xp:this.action>
</xp:eventHandler></xp:inputText> x + y<xp:span></xp:span><xp:span></xp:span>
</xp:view>
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
<xp:inputText id="inputText1" value="#{sessionScope.x}">
<xp:this.converter><xp:convertNumber type="number"></xp:convertNumber></xp:this.converter>
</xp:inputText><xp:span> x</xp:span><xp:br></xp:br>
<xp:inputText id="inputText2" value="#{sessionScope.y}">
<xp:this.converter><xp:convertNumber type="number"></xp:convertNumber></xp:this.converter>
</xp:inputText><xp:span></xp:span> y <xp:br></xp:br>
<xp:button id="button1" value="x + y">
<xp:eventHandler event="onclick" submit="true" refreshMode="complete">
<xp:this.action><![CDATA[#{javascript:sessionScope.z = sessionScope.x + sessionScope.y;
context.redirectToPage("xpage2.xsp")}]]></xp:this.action>
</xp:eventHandler>
</xp:button>
</xp:view>
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core"><xp:span></xp:span>
<xp:inputText id="inputText3" value="#{sessionScope.z}">
<xp:this.converter><xp:convertNumber type="number"></xp:convertNumber></xp:this.converter>
</xp:inputText> x + y<xp:span></xp:span>
<xp:span></xp:span>
</xp:view>
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
<xp:text escape="true" id="computedField1" value="#{javascript:session.getCommonUserName()}">
</xp:text>
</xp:view>
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
<xp:text escape="true" id="computedField1"
value="#{javascript:database.getAllDocuments().getCount().toFixed()}">
</xp:text> <xp:br></xp:br>
<xp:button id="button1" value="Create document">
<xp:eventHandler event="onclick" submit="true" refreshMode="complete">
<xp:this.action><![CDATA[#{javascript:var doc = database.createDocument();
doc.appendItemValue("Subject", "my subject");
doc.save()}]]></xp:this.action>
</xp:eventHandler>
</xp:button>
</xp:view>
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
<xp:this.data>
<xp:dominoDocument var="document1" formName="form1"></xp:dominoDocument>
</xp:this.data>
<xp:table>
<xp:tr>
<xp:td><xp:label value="Subject:" id="subject_Label1" for="subject1"></xp:label></xp:td>
<xp:td><xp:inputText value="#{document1.subject}" id="subject1"></xp:inputText></xp:td>
</xp:tr>
</xp:table>
<xp:button id="button1" value="Create document">
<xp:eventHandler event="onclick" submit="true" refreshMode="complete">
<xp:this.action><![CDATA[#{javascript:currentDocument.save();
context.redirectToPage("xpage2")}]]></xp:this.action>
</xp:eventHandler>
</xp:button></xp:view>
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
<xp:inputText id="inputText1"></xp:inputText><xp:br></xp:br>
<xp:inputText id="inputText2"></xp:inputText><xp:br></xp:br>
<xp:inputText id="inputText3">
<xp:eventHandler event="onclick" submit="true" refreshMode="complete">
<xp:this.action>
<![CDATA[#{javascript:getComponent("inputText3").setValue(getComponent("inputText1").getValue() + getComponent("inputText2").getValue())}]]>
</xp:this.action>
</xp:eventHandler>
</xp:inputText>
</xp:view>
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
<xp:this.data>
<xp:dominoDocument var="document1" formName="form1"></xp:dominoDocument>
</xp:this.data>
<xp:table>
<xp:tr>
<xp:td><xp:label value="Subject:" id="subject_Label1" for="subject1"></xp:label></xp:td>
<xp:td><xp:inputText value="#{document1.subject}" id="subject1"></xp:inputText></xp:td>
</xp:tr>
</xp:table>
<xp:button id="button1" value="Create document">
<xp:eventHandler event="onclick" submit="true" refreshMode="complete">
<xp:this.action><![CDATA[#{javascript:document1.save();
requestScope.status = "Document created"}]]></xp:this.action>
</xp:eventHandler>
</xp:button><xp:br></xp:br>
<xp:text escape="true" id="computedField1" value="#{requestScope.status}"></xp:text>
</xp:view>
Die Funktion window.alert ist für Server-Scripts nicht verfügbar.
Dieses Beispiel veranschaulicht eine Funktion, die die Anwendungsausgabe im Systemprotokoll hervorhebt:
// Funktion für das Hervorheben der Ausgabe im Protokoll
function printToLog(stuff) {
_dump("\r\nPRINT START\r\n");
_dump(stuff);
_dump("\r\nPRINT END\r\n");
}
// Testaufruf
printToLog("Hier sind einige Informationen für das Protokoll.");
Ein Script kann try-, catch- und finally-Klauseln wie in Java verwenden. Die catch-Klausel wird ausgeführt, wenn eine Ausnahme eintritt. Die finally-Klausel wird immer ausgeführt. Die Schaltfläche auf dieser Seite schreibt mithilfe des Mechanismus try ... catch Fehler in ein berechnetes Feld.
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
<xp:button id="button2" value="Create document">
<xp:eventHandler event="onclick" submit="true" refreshMode="complete">
<xp:this.action><![CDATA[#{javascript:try {
doc.appendItemValue("Subject", "my subject");
} catch(e) {
requestScope.status = "Error: " + e;
}}]]></xp:this.action>
</xp:eventHandler>
</xp:button><xp:br></xp:br>
<xp:text escape="true" id="computedField1" value="#{requestScope.status}"></xp:text>
</xp:view>
Bei diesem Anwendungsbeispiel tritt eine Ausnahme ein, da doc vor der Verwendung nicht definiert wird.
Wenn keine Ausnahme eintritt, sind die Ergebnisse von der Laufzeitumgebung abhängig. Beispielsweise wird im Browser oder auf dem Notes-Client eine Seite mit einer generischen Fehlernachricht angezeigt.
Informationen zu Gültigkeitsprüfungen finden Sie unter message - Fehler anzeigen und messages - Fehler anzeigen.
| Bibliothek | Beschreibung |
|---|---|
| Domino | Enthält NotesSession, NotesDatabase, NotesDocument und andere Klassen zum Abfragen und Bearbeiten von Benutzerdaten und der Serverumgebung des Benutzers. |
| DOM | Derzeit nicht verwendet, da der Datenspeicher nicht XML-basiert ist |
| Runtime | Stellt verschiedene Utility-Klassen zur Verfügung. |
| Standard | Stellt verschiedene Utility-Klassen zur Verfügung. |
| XSP | Bietet Zugriff auf den Ausführungskontext. |
| @Functions | Funktionen, die Notes-@Functions emulieren. |