SeaSideを使ってwebベースのアプリケーションを作ろうとしています。
インストールは、梅澤さんのSeaSideJページにあるインストールイメージをそのまま使って行いました。
http://swikis.ddo.jp/umejava/22
とにかく文字でも表示できるものをと思って、簡単なものから作っています。チュートリアルにあった、WACounterを参考に、以下のようなクラスを作ってみました。
WAComponent subclass: #MySeaSideApp1 instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'SeaSide-MyApp'
これがベースとなるクラスです。何の機能もいらないのでインスタンス変数も空です。
次に、インスタンスメソッドを登録します。
initialize self session registerObjectForBacktracking: self.
WACounterクラスで実装されていたのでコピペしましたが、デバッグ用のものでしょうか。なくても動くかもしれません。
renderContentOn: html html heading: 'MySeaSideApp1'. html text: 'Hello!'
これがキモとなるメソッドです。drawOn:のように、引数のオブジェクトhtmlに対してページを形作るメッセージを送っていきます。
今度はクラスメソッドを登録します。
initialize self registerAsApplication: 'MySeaSideApp1'
これがこのクラスをアプリケーションとして登録するためのもののようです。
canBeRoot ^ true
このメソッドでtrueを返すと、config画面のGeneralセクションでRoot Componentの一覧に現れるようになります。
これで準備は完了です。次にwebブラウザからSeaSideにアクセスして実際の動作を試してみます。
http://localhost:9090/seaside/config
上記のURLを開くと、IDとパスワードを尋ねられます。インストールのままならID=admin,パスワード=adminとしてconfig画面を開きます。
add entry point:の覧にMySeaSideApp1と入力し、TypeをSeaSide ApplicationとしてからAddを押します。すると、Application: MySeaSideApp1という画面に移ります。画面下部にGeneralというセクションがあるので、このRoot ComponentにMySeaSideApp1を選びます。
add…で入力したものはアクセスのためのエントリポイントで、後者が実行するアプリケーションというわけですね。画面最下部のDoneボタンを押せば、config画面に戻り、/seaside以下の一覧にMySeaSideApp1が現れているのがわかります。
MySeaSideApp1をクリックすると、
MySeaSideApp1 Hello!
という画面になります。renderContentOn:メソッドの内容と比べてみれば、どういうことなのかわかりますね。
クラス定義と4つのメソッドで、実際に動くwebアプリケーションが作れますし、生成するhtmlコードもプログラムでいかようにも操れるので結構便利です。
まだ少ししか使っていませんが、SeaSideで便利そうなのが実際のオブジェクトの中身をブラウザから確認できる点です。画面の一番下に、Toggle Halosというリンクがあります。これをクリックすると、ブラウザ上でハロが表示されます。目のボタンをクリックすると、実行中のセッションを扱うオブジェクトの内容を覗き見ることができます。これを使えば、アプリケーション動かしながらオブジェクトの変化の様子を知ることができるのです。
これから少しずつアプリケーションを作っていこうと思っています。