ページテンプレートでは、以下のように記述することでプログラムを呼び出すことができます。タグは"extend"でもかまいません。
<span ext:language="言語ID" ext:target="ソースファイル" />
ソースファイルにはページテンプレートファイルからの相対パスでファイル名を拡張子まで記入します。
言語IDとソースファイルの文字列の値は事前に式評価されます。例えばext:target="${sourcefile}"と書けば、リクエストコンテキストから sourcefile をキーとして取得した値を文字列としたものが使われます。
ソースファイル名の後に "#メソッド名" を続けて書くと、対応するメソッドが呼び出されます。指定しない場合はinvokeメソッドが呼び出されます。
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現在の一覧です。対応スクリプト言語は順次増やしていきます。
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"をプローブポイントにした場合に有効です。 | 不可 |