Einfacher Datenaustausch zwischen SSJS & JS

Im XPages-Developer-Forum wurde die Frage gestellt, wie man auf einer XPage einen Button dazu bringen kann, erst ein Serverseitiges JavaScript auszuführen, um danach dessen Rückgabewert in einem  Clientseitigen Javascript zu verarbeiten.

Meine Lösung hierzu sieht so aus, daß der Datenaustausch über eine Javascript-Variable durchgeführt wird. Ein Partialrefresh lädt dabei ein Outputscript nach, und das Clientseitige Javascript wird durch das „onComplete“-Ereignis der Aktion angestoßen. Das Outputscript wird dynamisch generiert.

Hier der dazugehörige Code:

<xp:button value="Label" id="button2">
   <xp:eventHandler event="onclick" submit="true"
      refreshMode="partial" refreshId="refreshMe">
      <xp:this.onComplete>
         <![CDATA[alert(test)]]>
      </xp:this.onComplete>
   </xp:eventHandler>
</xp:button>

<xp:div id="refreshMe">
   <xp:scriptBlock id="scriptBlock1">
      <xp:this.value>
         <![CDATA[#{javascript:"var test='" +
         java.lang.System.currentTimeMillis() +
         "'";}]]>
      </xp:this.value>
   </xp:scriptBlock>
</xp:div>

[In Fett: Das Ziel des Partialrefresh // In Rot: Die „Austausch“-Variable]

Natürlich läßt sich auf diese Weise auch mehr als nur eine Varable austauschen: Es kann beliebiger Code nachgeladen werden (komplette Javascript-Objekte uvm.). Der Scriptblock selbst ist nicht referenzierbar für den Partialrefresh, so daß der Block in ein anderes Element eingebettet sein muß, damit der Trick funktioniert.

Dieser Beitrag wurde unter Allgemein, HTML, Java Script, ServerSide JavaScript, XPages abgelegt und mit , , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert