2.2.1 fejezet, Kliens oldali XSLT

Az XSLT paraméterezése meghatározó a kimenet generálásában. Fontos megemlíteni, hogy szintén beemelhető paraméterként XML dokumentum, ami megoldást nyújthat humán nyelvi elemek dinamikus leképezésénél. Így a feliratok, statikus elemek egy szótár XML-ben tárolhatók.

<?xml version="1.0" encoding='utf-8'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
 
<xsl:output method="html" indent="yes"/>
<xsl:param name="fielddefs"/>
<xsl:param name="editable"/>
<xsl:param name="target"/>
<xsl:template match="/*">
  <table width="100%">
    <thead>
      <tr>
      	<td align="right">
		  <xsl:element name="input">
		    <xsl:attribute name="type">button</xsl:attribute>
			<xsl:attribute name="value">&lt;&lt;</xsl:attribute>
			<xsl:attribute name="onClick">JComponent.client.getPage('<xsl:value-of select="name()"/>','<xsl:value-of select="$target"/>','priorpage');</xsl:attribute>
		  </xsl:element>
		</td>
		<th align='center'>      	  	
      	  <xsl:value-of select="name()"/>
      	</th>
      	<td align="left">
		  <xsl:element name="input">
			<xsl:attribute name="type">button</xsl:attribute>
			<xsl:attribute name="value">&gt;&gt;</xsl:attribute>
			<xsl:attribute name="onClick">JComponent.client.getPage('<xsl:value-of select="name()"/>','<xsl:value-of select="$target"/>','nextpage');</xsl:attribute>
		  </xsl:element>
	    </td>      	  	
      </tr>
    </thead>
    <tbody>
      <tr>
        <td colspan="3">
      	  <xsl:element name="table">
      	    <xsl:attribute name="width">100%</xsl:attribute>
      	    <xsl:attribute name="id"><xsl:value-of select="name()"/></xsl:attribute>
      	    <thead>
      	      <tr>
      	        <xsl:if test="$editable='true'">
      	          <th>&#160;</th>
      	          <th>&#160;</th>
      	        </xsl:if>
      	        <xsl:for-each select="$fielddefs/fields/field[@visible='true']">
        	      <th><xsl:value-of select="label[@context='HUN']"/></th>
      	        </xsl:for-each>
      	      </tr>
      	    </thead>
      	    <tbody>
      	      <xsl:variable name="tablename" select="name()"/>
      	      <xsl:for-each select="item">
      	        <xsl:element name="tr">
      	          <xsl:if test="$editable='true'">
        	        <td valign='top'>
      	              <xsl:element name="a"><xsl:attribute name="href">javascript:void(JComponent.client.deleteOne(<xsl:value-of select="position()"/>,'<xsl:value-of select="$tablename"/>'));</xsl:attribute>
   	                    <img src="images/delrow.gif" border="0"/>
      	              </xsl:element>
      	            </td>
      	            <td valign='top'>
      	              <xsl:element name="a"><xsl:attribute name="href">javascript:void(JComponent.client.editOne(<xsl:value-of select="position()"/>,'<xsl:value-of select="$tablename"/>'));</xsl:attribute>
      	                <img src="images/edit.gif" border="0"/>
      	              </xsl:element>
      	            </td>
      	          </xsl:if>
      	          <xsl:variable name="row" select="./*"/>
      	          <xsl:for-each select="$fielddefs/fields/field[@visible='true']">
      	            <xsl:variable name="fieldname" select="@name"/>
    	  	        <td valign='top'><xsl:value-of select="$row[name()=$fieldname]"/></td>
    	  	      </xsl:for-each>
                </xsl:element>
      	      </xsl:for-each>
      	    </tbody>
      	  </xsl:element>
        </td>
      </tr>
    </tbody>
  </table>
</xsl:template>
 
</xsl:stylesheet>

XML paraméter átadásakor fontos, hogy egy XML részfát egész dokumentumként kell átadni paraméterbe, és a részfa másolatát kell átadni.

function Container(owner, name){
    this.init(owner);
    $.extend(this, new ActionDrivenObject(this, owner, name));
}
 
Container.prototype = {
    init: function(owner){
        this.className = 'Container';
        this.containerGroup = owner;
        this.pages = new Array();
		this.tableDefDoc = null;
    },
    buildTarget: function(target){
    },
    getTableDefDoc: function(){
		if (this.tableDefDoc == null) {
			var params = this.actions.getdescription.params;
			if ((params.descriptor != undefined) && (params.descriptor != null)) {
				var descriptor = this.actions.getdescription.params.descriptor.value;
				if ((descriptor != undefined) && (descriptor != null)) {
					var fieldDefs = $('containerdescriptor > fields', descriptor);
					if ((fieldDefs != null) && (fieldDefs.length > 0)) {
						this.tableDefDoc = this.createDocument();
						var fieldsDef = null;
						fieldsDef = fieldDefs[0].cloneNode(true);
						this.tableDefDoc.appendChild(fieldsDef);
					}
				}
			}
		}
        return this.tableDefDoc;
    }
}