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.