Durch die Verwendung des <xp:hidden>-Elements lässt sich ein verstecktes Feld auf der XPage anlegen.
Hier ein Beispiel mit einem statischen Wert:
<xp:inputHidden id="inputHidden1" value="abc" />
Die XPages-Engine rendert daraus diesen HTML-Code:
<input type="hidden" id="view:_id1:inputHidden1" name="view:_id1:inputHidden1" value="abc">
Soweit so gut, doch wenn man den Wert dynamisch zuweisen will, rendert die XPages-Engine nicht mehr ein referenzierbares Feld,…
<xp:inputHidden id="inputHidden1"> <xp:this.value> <![CDATA[#{javascript:"abc"}]]> </xp:this.value> </xp:inputHidden>
… sondern einen <span>-Tag, der natürlich auch den Wert nicht enthält:
<span id:"view:_id1:inputHidden1"></span>
Will man trotzdem den Wert des Feldes berechnen, gibt es zwei Möglichkeiten:
1. Die Berechnung wird auf Compute on page load geändert:
<xp:inputHidden id="inputHidden1">
<xp:this.value>
<![CDATA[${javascript:"abc"}]]>
</xp:this.value>
</xp:inputHidden>
2. Dem Feld wird eine Scope-Variable oder einem Dokumentenfeld via EL zugewiesen
<xp:inputHidden id="inputHidden1" value="#{viewScope.hiddenField}"> <xp:inputHidden id="inputHidden1" value="#{document1.hiddenField}">
Dann wird wie in der statischen Variante ein verstecktes Feld generiert, was sich sowohl mit CSJS als auch mit SSJS verarbeiten lässt.
Bei der 2. Vorgehensweise ist anzumerken, dass das Feld *nicht* gleichzeitig an einer anderen Stelle als bearbeitbares Feld vorhanden sein darf. Ansonsten wird der zuletzt eingegebene Wert auch in das versteckte Feld übernommen.
Deshalb sollte man sich angewöhnen, die 1. Methode anzuwenden, um ungewollte Überraschungen zu vermeiden 🙂