プログラムコール

概要

ページテンプレートでは、以下のように記述することでプログラムを呼び出すことができます。タグは"extend"でもかまいません。

<span ext:language="言語ID" ext:target="ソースファイル" />
    

ソースファイルにはページテンプレートファイルからの相対パスでファイル名を拡張子まで記入します。

言語IDとソースファイルの文字列の値は事前に式評価されます。例えばext:target="${sourcefile}"と書けば、リクエストコンテキストから sourcefile をキーとして取得した値を文字列としたものが使われます。

ソースファイル名の後に "#メソッド名" を続けて書くと、対応するメソッドが呼び出されます。指定しない場合はinvokeメソッドが呼び出されます。

ext:languageの設定値

ext:languageに指定できる言語IDと、その概要は以下のとおりです。

言語ID 摘要
java Java(http://java.sun.com/ )
rhino Rhino - JavaScript for Java(http://www.mozilla.org/rhino/ )
BeanShell BeanShell - Lightweight scripting for Java(http://www.beanshell.org )
pnuts Pnuts(https://pnuts.dev.java.net/ )
jython The Jython project(http://www.jython.org/Project/index.html )
sisc Second Interpreter of Scheme Code(http://sisc-scheme.org/ )

※"java"はスクリプト言語ではありませんが、他のスクリプト言語と同様に扱えるため、一覧に記載しています。

※2008/6/10現在の一覧です。対応スクリプト言語は順次増やしていきます。

プログラムコードの書き方(Java編)

ext:target で指定したパスに相当する以下のファイルを作成します。クラス名とファイル名は合わせてください。

import java.util.Map;
import quickreflector.silvergear.scriptdriver.java.JavaFunctionMarker;

public class <classname> implements JavaFunctionMarker {

    public void invoke( Map context, Map meta ) {
        ;
    }
}
    

このファイルに必要な処理を記述し、ページをリクエストすると自動的にコンパイルが行われ、プログラムが呼び出されます。

context 変数の内容についてはリクエストコンテキストを参照してください。meta 変数の内容は後述のメタマップの内容を参照してください。

ページ遷移

処理をしている途中で他のページに遷移したり、ページ出力を中止する場合は特定の例外を送出します。例外の一覧は以下のとおりです。

用途 例外 記述例
エラーページ扱い quickreflector.silvergear.ErrorPageException throw new ErrorPageException( 404 );
ページフォワード quickreflector.webcore.ForwardException throw new ForwardException( "/top.jsx" );
リダイレクト quickreflector.webcore.RedirectException throw new RedirectException( "http://targetsite/" );
出力中止 quickreflector.webcore.PageStopException throw new PageStopException();

上記の例外はWebCoreにおいて、"on_exception"イベントにトラップされません。

メタマップの内容

コードを ext:language またはプローブファンクション設定で呼び出した場合のマップ引数のうちの第2引数に関する説明です。このマップには利用頻度は多くはないものの、必要となることがあるオブジェクトが格納されており、通常は以下のものが設定されています。

ライブラリの組み合わせや設定、コード記述によっては他の値(_STACKMACHINE_、_PAGERENDERER_、$HTTP-HEADERなど)が設定されることもありますが、それらの値は他の処理で使っているもので直接には取り扱えません。"変更"欄が不可のものも、変更しても意味がないか、動作が不明となることがあります。

"ライブラリ"がSilverGearであるものはMetaMapAdapterまたはMetaMapLoaderクラス、WebCoreであるものはMetaMapLoaderクラスを通じてアクセスすると型キャストの手間が省けます。

ライブラリ キー 値の型 内容 変更
SilverGear _ENTRYPATH_ java.lang.String 大元のリクエストパス相当(WebCoreにおいては拡張子を変更) 不可
SilverGear _PAGEPATH_ java.lang.String ページパス。include先からプログラムが呼び出されると_ENTRYPATH_の値と異なるものになります) 不可
SilverGear _DOMPATH_ java.lang.String DOM階層パス。ext:language においては意味を持ちません。プローブファンクションにおいて現在処理中のDOM階層を示します。 不可
SilverGear _OUTPUT_ java.io.Writer(の継承) ページデータの出力先として使用中のWriterオブジェクトです。 不可
SilverGear _PAGECODEDRIVER_ quickreflector.silvergear.script. ScriptDriver(の継承) スクリプトドライバクラスです。言語IDと正しいソースファイルパスを指定して呼び出すと、動的に他のスクリプトを呼び出すことができます。 不可
SilverGear _MACROSET_ quickreflector.silvergear. codemaker.macro.MacroSet マクロセットクラスです。マクロセットとして登録されているマクロによる処理結果を得ることができます。使い道としては文字列として表現されている(=ファイルでない)何かのプログラムを処理して返すSetマクロを呼び出して処理をさせることが考えられます。 不可
SilverGear _PATHATTR_ java.util.Map(の継承) ext:language においては意味を持ちません。プローブファンクションにおいて、現在処理中のDOM階層のタグが持つ属性を保持しています。
SilverGear _VALUE_ java.util.Map(の継承) ext:language においては意味を持ちません。プローブファンクションにおいて、現在処理中のテキストまたはコメントノードの値を保持しています。テキストの場合はキーが"#text"、コメントの場合はキーが"#comment"となります。
WebCore _REQUEST_ javax.servlet.HttpServletRequest
(の継承)
不可
WebCore _RESPONSE_ javax.servlet.HttpServletResponse
(の継承)
不可
WebCore _EXCEPTION_ java.lang.Exception(の継承) 生じた例外をトラップして処理するために使用します。プローブファンクションにおいて"on_exception"をプローブポイントにした場合に有効です。 不可