さて次に、スタイルシートから拡張オブジェクトのメソッドを呼び出してみよう。たとえば、商品一覧をカテゴリ別に異なる背景色で表示したいとしよう。このような処理は、拡張オブジェクトを使うことで実現できる。
まずは、コードディレクトリにBGColorと名付けた新しいクラスを作ることからはじめる。このクラスは、与えられたカテゴリIDごとに返す背景色を決定するものだ(リスト5)。
リスト5■背景色を返す(C#)。ReturnBGColorメソッドの実装は素直だ。引数として渡されたカテゴリIDに基づき適切な背景色を返すだけだ |
public class BGColor { public string ReturnBGColor(int categoryID) { string bgColor=null; switch (categoryID) { case (1): bgColor = "#FFFFC0"; break; case (2): bgColor = "#80FF80"; break; case (3): bgColor = "#FFE0C0"; break; case (4): bgColor = "#C0C0FF"; break; case (5): bgColor = "#C0FFFF"; break; case (6): bgColor = "#FFC0FF"; break; case (7): bgColor = "#FFC0C0"; break; case (8): bgColor = "#C0FFC0"; break; } return (bgColor); } } |
色の決定は非常に単純だ。次にスタイルシートからいま実装したReturnBGColorメソッドを呼び出したい。そのためには、ProductsPaging.xlファイルにおいて、下記太字の部分を加える。
<?xml version="1.0" ?> <xsl:stylesheet version="1.0" xmlns:xsl= "http://www.w3.org/1999/XSL/Transform" xmlns:myColor="urn:myColor"> <xsl:output method="html" /> …略… <!-- 個別の行に関するそれぞれのレコード --> <xsl:element name="tr"> <xsl:attribute name="bgcolor"> <xsl:value-of select= "myColor:ReturnBGColor(CategoryID)" /> </xsl:attribute> <xsl:element name="td"> <xsl:value-of select="ProductID" /> </xsl:element> …略… </xsl:stylesheet> |
拡張オブジェクトと名前空間URIとを関連付けるには、xslstylesheet要素で属性「xmlns:myColor="urn:myColor"」を指定する。いちどオブジェクトと名前空間URIとを関連付ければ、それがあたかもスタイルシートの一部かのように、該当オブジェクトのメソッドを呼び出せるのだ。
<xsl:value-of select= "myColor:ReturnBGColor(CategoryID)" /> |
この行は、カテゴリIDを渡してBGColorクラスのReturnBGColorメソッドを呼び出す。次のステップは、拡張オブジェクトのメソッドを呼び出せるように、拡張オブジェクトをスタイルシートに渡すことだ(リスト6)。
Copyright © ITmedia, Inc. All Rights Reserved.