お決まりの HelloWorld を作ります
HelloWorldを表示する HTMLファイルの中身は、
<!doctype html> <HTML> <HEAD> <title>Home</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> </HEAD> <BODY> <h2>Example</h2> <div>The current time is <span class="seedo:ews.HelloWorld:tb">now</span>.</div> </BODY> </HTML>
spanタグの class=”seedo:ews.HelloWorld:tb” という属性がポイント。
spanタグが、ews.HelloWorld.scala のクラスを生成して置き換わります。
class属性の表記法は、: が区切り文字。
- 最初の seedo は、動的ページに置き換わるタグを示します。
spanタグの中に別のタグがあったとしても、全部置き換えます。 - 2番目のews.HelloWorld は動的ページのためのクラス。
Scala でも、Java でもOK
クラス名はパッケージ名を含むフルパス。 - 3番目のtb は、ews.HelloWorldクラスの実行させる関数。
この場合は、tb関数。引数はなし。 - tb関数に引数を持たせたい場合は、4番目に引数を記述します。
たとえば、以下のように。class=”seedo:ews.HelloWorld:tb:3.14″
この処理を実装するには、2つの機能が必要になります。
- ews.HelloWorldクラスを生成して、tb関数を呼び出すこと
- tb関数が生成した文字列を、元のタグと置換すること
ews.HelloWorldクラスの実装は
package ews import java.util.{HashMap,Date} import scala.collection.JavaConversions._ /** * A class that's instantiated early and run. It allows the application * to modify Seedo's environment */ class HelloWorld { var tag:String = null // Replaced original tag def setTag(tg:String): Unit = {tag = tg} var parameterMap:HashMap[String,Array[String]] = null // Parameter from request of servlet def setParameterMap(pm:HashMap[String,Array[String]]) : Unit = {parameterMap = pm} // Function without argument def tb : String = { "HelloWorld " + new Date } def tb(no:Double) : String = { "HelloWorld Double [" + no + "] " + new Date } def tb(no:String) : String = { "HelloWorld String [" + no + "] " + new Date } }
クラスの中には、2つの変数があります。
var tag:String は、置換元となるタグがセットされます。
もし、置換元をHelloWorldクラス側で参照して処理したい場合に使います。
var parameterMap:HashMap[String,Array[String]] は、
Servletのリクエストから渡されてきたパラメータのすべてを参照するためのものです。
これがないと、動的ページを生成する条件やデータが渡せなくなりますから。
型の仕様は、ServletのparameterMapを参照してください。
この変数に対して、setter関数が定義されます。
次に、関数
この例では3つの関数が定義されています。
関数名はともに tb です。返り値はString型。
- 1つ目は、引数なしのtb関数
- 2つ目は、引数にDouble型を取るもの
- 3つ目は、引数にString型を取るもの
HTMLファイルの例では、引数なしのtb関数が呼び出されます。
コメントを残す
コメントを投稿するにはログインしてください。