Förutom standardfunktionerna i XSLT finns det ett API i proxymodulen som kan användas. Dessa funktioner gör det enklare att göra vissa saker, och är specifika för hur proxy-integrationer görs. De ger även tillgång till funktioner i SiteVision som är bra att ha.
Funktionerna är tillgängliga via en Java-klass som registreras som namespace i XSLT-transformationen. Standardtransformationen som används vid skapande av en ny proxymodul gör detta automatiskt, och gör namespacet "proxy" tillgängligt. Nedan redovisas vilka funktioner som finns att använda.
Denna funktion tar den angivna länken, som kan vara relativ, och skriver om den i enlighet med de uppsatta reglerna för länkomskrivning. Resultatet är alltid en absolut länk oavsett om den anses vara intern eller inte.
Om länken är till en sida utanför länkomfånget används URL'en till den sida som gav upphov till HTML'en i nuvarande anrop för att göra den absolut. Om HTML'en exempelvis laddas från "http://www.somecompany.com/foo/index.html" och länken är "aboutus.html" blir alltså den resulterande länken "http://www.somecompany.com/foo/aboutus.html".
Om länken är till en sida i det angivna länkomfånget registreras den internt i proxyn och istället returneras en länk som pekar på proxymodulen. Dessa länkar startar alltid med "/sitevision/proxy". När klienten följer dessa länkar kommer proxymodulen att slå upp den registrerade länken och hämta den HTML som finns där.
<xsl:template match="a[@href]">
<a href="{proxy:link($proxy,@href)}">En omskriven länk</a>
</xsl:template>
Denna funktion fungerar på samma sätt som ovanstående, men öppnar angiven länk i "solo"-läge om parametern solo är satt till "true", dvs endast proxymodulen utan omgivande sida visas. Detta är framförallt användbart om länken ska öppnas i nytt fönster, där man inte vill ha med navigationen och övrigt på sidan som proxymodulen finns på.
<xsl:template match="a[@href]">
<a target="popup" href="{proxy:link($proxy,@href, true())}">En omskriven länk i ett nytt fönster</a>
</xsl:template>
Den genererade länken kommer att innehålla resursens sökväg som sista del. Detta gör det möjligt att manuellt lägga till extra sökvägsdelar eller parametrar:
<script>
link = '<xsl:value-of select="proxy:link($proxy,'http://somehost/someresource.html', true())"/>';
</script>
<a href=""
onclick="javascript:window.open(link+'?someparam=somevalue');return false">Generated link</a>
Gör länkomskrivning i JavaScript. Framförallt anrop till JavaScript-funktionen "open" görs om så att länken som skickas in följer de länkomskrivningsregler som är uppsatta.
Följande exempel skriver ut ett script som öppnar en given URL i ett nytt fönster.
<xsl:variable name="script">window.open("/foo.html")</xsl:variable>
<script type="text/javascript">
<xsl:value-of select="proxy:script($proxy,$script)"/>
</script>
Gör länkomskrivning i map-parametrar i JavaScript. Framförallt används detta för Ajax-bibliotek som t.ex. jQuery.
Följande exempel skriver om parametern url:
<xsl:template match="//script/text()">
<xsl:value-of select="proxy:rewriteScriptMap($proxy, 'url', .)"/>
</xsl:template>
i följande javascript:
$.ajax({
type: "GET",
url: '/Test.jsp',
dataType: "html",
success: function (data) {
doSomething(data);
}
});
Gör länkomskrivning i funktionsparametrar i JavaScript. Framförallt används detta för Ajax-bibliotek som t.ex. Prototype.
Följande exempel skriver om parametern i funktionen Ajax.Request:
<xsl:template match="//script/text()">
<xsl:value-of select="proxy:rewriteScriptParameter($proxy, 'Ajax.Request', .)"/>
</xsl:template>
i följande javascript:
new Ajax.Request('/some_url')
Returnera startadressen för proxymodulen.
Current app: <xsl:value-of select="proxy:base($proxy)"/>
Returnera nuvarande URL som processas.
Skriv ut "base" tagg i HTML:
<base href="{proxy:base($proxy)}"/>
URL'en kan användas för att avgöra om en viss regel ska köras:
<xsl:template match="html[contains(proxy:url($proxy),'somehost')]">
Showing content from "somehost":<br/>
<xsl:apply-templates select="body"/>
</xsl:template>
Returnera proxymodulens bredd.
<table width="{proxy:width($proxy)}">
<tr><td>Table using all space</td></tr>
</table>
Returnera proxymodulens höjd.
<div style="height:{proxy:width($proxy)}">
Use all space for this div.
</div>
Sätt vilken portlet som ska ta emot anropet för efterkommande länkar. Detta kan användas för att från en proxymodul ange en annan proxymodul på samma sida.
Det är antingen namnet på proxymodulen eller dess id som ska anges. Enklast är oftast att ange namnet på modulen såsom det är angivet i sidans innehåll.
Ett exempel på detta är att ha två proxymoduler där den ena är navigation och den andra innehåll. Navigationsmodulen anger då den andra som target på följande sätt:
<xsl:template match="/">
<xsl:value-of select="proxy:target($proxy, 'main')" />
<xsl:apply-imports/>
</xsl:template>
Alla länkar som skapas kommer att visa innehållet i den proxymodul på samma sida som har namnet "main". Navigationsmodulen kommer i detta fall aldrig att byta innehåll.
Gör om en relativ URL till en absolut URL med hjälp av URL'en till sidan som just nu processas.
Om sidan http://www.senselogic.se/test/foo.html just nu processas kan man göra följande:
<xsl:value-of select="proxy:resolve($proxy,'bar.html')"/>
Detta kommer att skriva ut den absoluta URL'en http://www.senselogic.se/test/bar.html
Utför en HTTP GET på angiven URL. Om URL'en är relativ kommer den först att göras absolut genom anropet resolve(url), som beskrivits ovan. Metoden returnerar en DOM som motsvarar det dokument som URL'en pekar på. Denna kan sedan användas för vidare bearbetning.
Hämta titel från länkad sida och ange som "alt" på en länk:
<xsl:template match="a[@href]">
<xsl:copy>
<xsl:attribute name="alt">
<xsl:value-of select="proxy:get($proxy, @href)/head/title"/>
</xsl:attribute>
<xsl:apply-templates select="@*"/>
</xsl:copy>
</xsl:template>
Utför en HTTP POST mot en angiven URL. Om URL'en är relativ kommer den först att göras absolut genom anropet resolve(url), som beskrivits ovan. Eventuella parametrar till sidan som proxyn finns på kommer att skickas med som parametrar i postningen. Metoden returnerar en DOM som motsvarar det dokument som URL'en pekar på. Denna kan sedan användas för vidare bearbetning.
Posta till en given URL:
<xsl:template match="/">
<xsl:apply-templates select="proxy:post($proxy, 'http://somehost/form.html')"/>
</xsl:template>
Utför en HTTP POST genom att skicka det formulär som finns i angiven DOM. Alla input-fält som finns i formuläret kommer att sättas som parametrar i anropet. Metoden returnerar en DOM som motsvarar det dokument som URL'en pekar på. Denna kan sedan användas för vidare bearbetning.
Skapa formulär som variabel, posta det, och skriv ut resultatet:
<xsl:variable name="form">
<form action="someform.html">
<input name="firstname" value="Rickard"/>
<input name="lastname" value="Oberg"/>
</form>
</xsl:variable>
<xsl:template match="/">
<xsl:apply-templates select="proxy:post($proxy, $form)"/>
</xsl:template>
Returnera parameter från anropet till sidan där proxymodulen finns.
Skriv ut värdet av parametern "foo":
Foo: <xsl:value-of select="proxy:parameter($proxy,'foo')"/>
Returnera attribut från anropet till sidan där proxymodulen finns.
Skriv ut värdet av attributet "foo":
Foo: <xsl:value-of select="proxy:attribute($proxy,'foo')"/>
Returnera sparad parameter för nuvarande resurs som bearbetas.
Undansparat användarnamn för nuvarande sida:
<xsl:value-of select="proxy:storedParameter($proxy,"username")/>
Returnera sparad parameter för resurs med angiven URI.
Undansparat användarnamn för loginsidan:
<xsl:value-of select="proxy:storedParameter($proxy,"username", "/login.html")/>
Ta bort sparade parametrar för angiven URI.
Ta bort alla sparade parametrar till loginsida:
<xsl:variable name="dummy" select="proxy:removeStoredParameters('/login.html')/>
Ta bort inloggningsinformation. Detta gör att efterföljande anrop kommer skapa ny session mot underliggande applikation, vilket normalt sett leder till att användaren måste logga in igen.
Logga ut om "logout" parameter angivits:
<xsl:if test="proxy:parameter($proxy,'logout')">
<xsl:variable name="dummy" select="proxy:logout($proxy)"/>
</xsl:if>
Last updated: