Java CFX タグを作成するには、カスタムタグインターフェイスを実装するクラスを作成します。このインターフェイスには processRequest というメソッドが 1 つ含まれています。このメソッドには、タグで処理する Request および Response オブジェクトが渡されます。
次の手順の例では、呼び出しページにテキスト文字列を書き込む cfx_MyHelloColdFusion という単純な Java CFX タグを作成します。
- 次のコードを使用して、エディタでソースファイルを作成します。
public class MyHelloColdFusion implements CustomTag { public void processRequest( Request request, Response response ) throws Exception { String strName = request.getAttribute( "NAME" ) ; response.write( "Hello, " + strName ) ; } }
- このファイルに "MyHelloColdFusion.java" という名前を付けて、"WEB_INF/classes" ディレクトリに保存します。
Java コンパイラを使用して、Java ソースファイルをクラスファイルにコンパイルします。JDK に同梱されているコマンドツールを使用する場合は、"classes" ディレクトリで次のコマンドラインを実行します。
javac -classpath cf_root\WEB-INF\lib\cfx.jar MyHelloColdFusion.java
このコマンドは、Java コンパイラ(javac.exe)がパスに含まれている場合にのみ動作します。パスに含まれていない場合は、完全修飾パスを指定してください。たとえば、Windows の場合は c:¥jdk1.3.1_01¥bin¥javac、UNIX の場合は /usr/java/bin/javac などのように指定します。
コンパイル時にエラーが発生した場合は、ソースコードが正しく入力されているかどうかを確認してください。エラーが発生しなければ、初めての Java CFX タグが正しく作成できたことになります。
ColdFusion ページからの CFX タグの呼び出し
ColdFusion ページから Java CFX タグを呼び出すには、ColdFusion Administrator の CFX タグページで登録した CFX タグの名前を使用します。この名前は、接頭辞 cfx_ の後ろにクラス名(.class 拡張子は除く)を付加したものにします。
ColdFusion Administrator での Java CFX タグの登録
- ColdFusion Administrator で、[拡張機能]-[CFX タグ] を選択します。
- [Java CFX の登録] をクリックします。
- タグ名(例えば、cfx_MyHelloColdFusion)を入力します。
- 拡張子 .class を除いたクラス名(例えば、MyHelloColdFusion)を入力します。
- (オプション) 説明を入力します。
- 送信ボタンをクリックします。
これで、ColdFusion ページからタグを呼び出すことができます。
ColdFusion ページからの CFX タグの呼び出し
HelloColdFusion カスタムタグを呼び出す次の ColdFusion ページ (.cfm) をエディタで作成します。
<body> <cfx_MyHelloColdFusion NAME="Les"> </body> </html>
- ColdFusion ページを配置するためのディレクトリにファイルを保存します。たとえば、Windows の場合は "c:¥inetpub¥wwwroot¥cfdocs¥testjavacfx.cfm" に保存し、UNIX の場合は "/home/docroot/cfdocs/testjavacfx.cfm" に保存します。
- CFX タグをまだ登録していない場合は、ColdFusion Administrator で登録します(「C++ を使用した CFX タグの開発」の「CFX タグの登録」を参照)。
- 次のような適切な URL を使用してブラウザからページをリクエストします。http://localhost/cfdocs/testjavacfx.cfm
ColdFusion によってページが処理され、「Hello, Les」と表示するページが返されます。エラーが返される場合は、ソースコードが正しく入力されているかどうかを確認してください。
ColdFusion Administrator での CFX タグの削除
- ColdFusion Administrator で、[拡張機能]-[CFX タグ] を選択します。
- [登録された CFX タグ] リストで、削除するタグの [コントロール] 列の [削除] アイコンをクリックします。
リクエストの処理
Java CFX タグを実装するには、processRequest メソッドに渡される Request および Response オブジェクトを操作する必要があります。また、ColdFusion クエリーを処理する必要のある CFX タグでは、Query オブジェクトも操作する必要があります。Request オブジェクト、Response オブジェクトおよび Query オブジェクトは、WEB-INF/lib/cfx.jar アーカイブ内の com.allaire.cfx パッケージに含まれています。
これらのオブジェクトの詳細については、『CFML リファレンス』の「ColdFusion Java CFX リファレンス」を参照してください。Request オブジェクト、Response オブジェクトおよび Query オブジェクトを使用する Java CFX タグの完全な例については、「ZipBrowser の例」を参照してください。
Request オブジェクト
Request オブジェクトは、CustomTag インターフェイスの processRequest メソッドに渡されます。次の表に、タグに渡された属性(クエリーなど)の取得や、グローバルタグ設定の取得に使用する Request オブジェクトのメソッドを示します。
メソッド |
説明 |
---|---|
attributeExists |
このタグに属性が渡されたかどうかをチェックします。 |
debug |
タグに debug 属性があるかどうかをチェックします。 |
getAttribute |
渡された属性の値を取得します。 |
getAttributeList |
タグに渡されたすべての属性名のリストを取得します。 |
getIntAttribute |
渡された属性の整数値を取得します。 |
getQuery |
このタグにクエリーが渡された場合は、そのクエリーを取得します。 |
getSetting |
グローバルカスタムタグ設定の値を取得します。 |
これらのインターフェイスに関する詳細なリファレンス情報については、『CFML リファレンス』を参照してください。
Response オブジェクト
Response オブジェクトは、CustomTag インターフェイスの processRequest メソッドに渡されます。次の表に、出力の書き込み、クエリーの生成、および呼び出しページ内の変数の設定に使用する Response オブジェクトのメソッドを示します。
メソッド |
説明 |
---|---|
write |
呼び出しページにテキストを出力します。 |
SetVariable |
呼び出しページの変数を設定します。 |
addQuery |
呼び出しページにクエリーを追加します。 |
writeDebug |
デバッグストリームにテキストを出力します。 |
これらのインターフェイスに関する詳細なリファレンス情報については、『CFML リファレンス』を参照してください。
Query オブジェクト
Query オブジェクトは、ColdFusion クエリーを操作するためのインターフェイスを提供します。次の表に、名前、行数、および列名の取得や、データ要素の取得および設定を行う Query オブジェクトのメソッドを示します。
メソッド |
説明 |
---|---|
getName |
クエリーの名前を取得します。 |
getRowCount |
クエリーの行数を取得します。 |
getColumnIndex |
クエリー列のインデックスを取得します。 |
getColumns |
クエリー列の名前を取得します。 |
getData |
クエリーからデータ要素を取得します。 |
addRow |
クエリーに新しい行を追加します。 |
setData |
クエリー内にデータ要素を設定します。 |
これらのインターフェイスに関する詳細なリファレンス情報については、『CFML リファレンス』を参照してください。
Java CFX タグのライフサイクル
Java CFX オブジェクトのインスタンスは、Java CFX タグが呼び出されるたびに新しく作成されます。したがって、CustomTag オブジェクトのメンバーにそのリクエスト固有のインスタンスデータを保存しても問題はありません。CustomTag のすべてのインスタンスからアクセス可能なデータやオブジェクトを保存するには、スタティックデータメンバーを使用します。その場合は、データへのすべてのアクセスがスレッドセーフであることを確認する必要があります。