Das Notes Forum

Domino 9 und frühere Versionen => ND8: Entwicklung - XPages => Thema gestartet von: Fineas am 16.05.13 - 17:49:07

Titel: xe:dialog nacheinander aufrufen
Beitrag von: Fineas am 16.05.13 - 17:49:07
Hallo zusammen,

gibt es eine elegante Lösung 2 oder mehrere Dialoge nacheinander aufzurufen?

Ziel soll es sein, im ersten Dialog eine Erklärung abzufragen und mit deren Bestätigung den Dialog zu schließen und einen weiteren Eingabedialog anzuzueigen. Das tut aber nicht. Ist der erste Dialog offen, zeigt der zweite nach dessen Schließen keine Reaktion.

Gruß, Heiko
Titel: Re: xe:dialog nacheinander aufrufen
Beitrag von: Fineas am 11.06.13 - 14:30:26
Falls es jemanden interessiert:

Zwei Dialoge nacheinander funktionieren nach meinem bisherigen Erkenntnisstand nur mittels <iFrame>. Es wird also mindestens eine weitere XPage als Dialog benötigt, die dann mit der Parent-Page interagiert. Die Anregung kam durch ein anderes Problem, dem Dateiupload über Dialog, wofür es hier eine interessante Beschreibung gibt:

http://www.dominoguru.com/pages/xpage_fileupload_extlib_dialog_tutorial.html

Gruß, Heiko
Titel: Re: xe:dialog nacheinander aufrufen
Beitrag von: Sven Hasselbach am 12.06.13 - 08:34:21
Mit der executeOnServer-Funktion und einem Serverseitigen Event sollte es doch auch gehen:

Code
<?xml version="1.0" encoding="UTF-8"?>
<xp:view
	xmlns:xp="http://www.ibm.com/xsp/core"
	xmlns:xe="http://www.ibm.com/xsp/coreex">
	
	<xp:button
		value="Show"
		id="buttonShowDialog1">
		<xp:eventHandler
			event="onclick"
			submit="true"
			refreshMode="partial">
			<xp:this.action><![CDATA[#{javascript:getComponent("dialog1").show()}]]></xp:this.action>
		</xp:eventHandler>
	</xp:button>
	
	<xe:dialog
		id="dialog1"
		onHide="executeOnServer('showDialog2', '#{id:dialog2}')">DIALOG 1</xe:dialog>
	<xe:dialog
		id="dialog2">DIALOG 2</xe:dialog>
		
	<xp:scriptBlock
		id="scriptBlockExecOnServer">
		<xp:this.value>
			<![CDATA[
			
			var executeOnServer = function () {
	
		        // must supply event handler id or we're outta here....
		        if (!arguments[0])
		            return false;
		
		        // the ID of the event handler we want to execute
		        var functionName = arguments[0];
		
		        // OPTIONAL - The Client Side ID that you want to partial refresh after executing the event handler
		        var refreshId = (arguments[1]) ? arguments[1] : "@none";
		        var form = (arguments[1]) ? XSP.findForm(arguments[1]) : dojo.query('form')[0];
		
		        // OPTIONAL - Options object contianing onStart, onComplete and onError functions for the call to the
		        // handler and subsequent partial refresh
		        var options = (arguments[2]) ? arguments[2] : {};
		
		        // Set the ID in $$xspsubmitid of the event handler to execute
		        dojo.query('[name="$$xspsubmitid"]')[0].value = form.id + ':' + functionName;
		        XSP._partialRefresh("post", form, refreshId, options);
	
	    	}
	    	]]>
    	</xp:this.value>
	</xp:scriptBlock>
	
	<xp:eventHandler
		event="eventShowDialog2"
		id="showDialog2">
		<xp:this.action><![CDATA[#{javascript:getComponent("dialog2").show()}]]></xp:this.action>
	</xp:eventHandler>
	
</xp:view>