Florin M.
Florin M.

Reputation: 2169

xpages: custom addOnLoad event on my xpage

The scenario:

Clicking on a link, I'm accessing an xpage, let say: start.xsp.

I've added the following script to this .xsp:

<xp:scriptBlock id="scriptBlock1">
        <xp:this.value><![CDATA[
        XSP.addOnLoad(function(){
            XSP.openDialog("#{id:dialogSearch}")
        });
    ]]></xp:this.value>
    </xp:scriptBlock>

So, every time this .xsp is loaded, a dialog is showing up. The problem is the current start.xsp is being refreshed/loaded many times, considering the fact that the xpage have numerous fields/controls on it. It is uncomfortable every time this start.xsp is loaded / refreshed the dialog to show up.

Is it possible to show the dialog after the start.xsp is loaded but ONLY when the above link was clicked? I do want firstly to go to that xpage and after this to show the respective dialog.

Thanks for your time.

Upvotes: 2

Views: 416

Answers (1)

Knut Herrmann
Knut Herrmann

Reputation: 30960

Set a session scope variable in your link

<xp:link
    escape="true"
    text="Link"
    id="link1">
    <xp:eventHandler
        event="onclick"
        submit="true"
        refreshMode="complete">
        <xp:this.action><![CDATA[#{javascript:
            sessionScope.showDialogSearch = "yes"; 
            context.redirectToPage("start.xsp")
        }]]></xp:this.action>
    </xp:eventHandler>
</xp:link>

Add a rendered attribute to your start.xsp's xp:scriptBlock

    <xp:this.rendered><![CDATA[#{javascript:
        var show = sessionScope.showDialogSearch;
        sessionScope.remove("showDialogSearch"); 
        return show
    }]]></xp:this.rendered>

This way dialog is only be shown if start.xsp was executed from your link and only once because it gets deleted at first use in rendered attribute.

Upvotes: 2

Related Questions