CGIKitではWebページ=コンポーネントです。基本的に、メソッドの戻り値にコンポーネントのオブジェクトを返すことでWebページを表示します。新しいコンポーネントオブジェクトはCKComponent#page()で取得できます。引数にはコンポーネント名を指定します。
class MainPage < CKComponent
def do_any_action
# 何か処理を行う
...
# 次に表示するページ(コンポーネント)を生成する
next_component = page(“NextPage“)
return next_component
end
end
他のコンポーネントにリンクを張るだけ(実行するアクションがない)ならばCKHyperlinkエレメントを使います。エレメントのpage属性にリンクするコンポーネント名を設定してください。
Link : CKHyperlink {
page = “OtherPage”;
}
「フォームから入力されたデータを処理し、次のページで入力したデータの確認を行う」など、他のコンポーネントに必要なデータを渡さなければならないことがあります。このようなときはデータを渡すコンポーネントにアクセサを定義しておき、そのアクセサを使ってデータを設定します。
例として、MainPageコンポーネントでユーザーの名前を入力し、HelloPageコンポーネントでその名前を表示するアプリケーションを考えます。MainPageにはユーザー名を入力するためのテキストフィールドがあり、インスタンス変数user_nameにデータが代入されるものとします。
HelloPageではMaiPageで入力されたユーザー名を表示します。MainPageからデータを受け取るためのアクセサuser_nameを定義します。
class HelloPage < CKComponent attr_accessor :user_name end
MainPageでは入力されたユーザー名をHelloPageに渡します。
class MainPage < CKComponent
def set_user_name_to_hellopage
# HelloPageを生成し、ユーザー名を渡す
hellopage = page(“HelloPage”)
hellopage.user_name = @user_name
# HelloPageを表示する
return hellopage
end
end
CKComponentクラスでは専用の初期化メソッドinit()が用意されています。初期化をするにはinitialize()ではなくinit()をオーバーライドします。
init()の実行時、フォームデータはまだコンポーネントに代入されていません。エレメントにバインディングした変数を使おうとしてもデータが代入されていませんので注意して下さい。変数にデータが代入された状態での初期化はpre_action()メソッドをオーバーライドして記述します。
アクション実行前後に処理を行うにはCKComponent#pre_action()、post_action()メソッドをオーバーライドします。これらのフックメソッドはそれぞれアクション実行前、実行後に呼ばれます。特定のアクションではなく、どのアクションに対しても呼ばれることに注意してください。またpre_action()が呼ばれるときには、フォームデータはバインディングファイルの設定通りに代入されています。
アプリケーションで例外が発生するとCGIKitのデフォルトエラーページ(CKErrorPage)が表示されますが、アプリケーション専用のエラーページを作成することもできます。カスタムエラーページを作成・設定すると、例外が発生したときデフォルトエラーページの代わりに使われるようになります。
カカスタムエラーページはCKErrorPageのサブクラスになります。それ以外は普通のコンポーネントと同じように作成します。
class CustomErrorPage < CKErrorPage end
以下にCKErrorPageクラスの主なメソッドを示します。
| メソッド | 説明 |
|---|---|
error() |
発生した例外オブジェクトを返す。 |
reason() |
エラーメッセージを返す。 |
backtrace() |
バックトレースを返す。 |
error_class() |
発生した例外クラスを返す。 |
次に、アプリケーション環境設定のerror_page属性にカスタムエラーページ名を設定します。
app = CKApplication.new app.error_page = ‘CustomErrorPage’
以上でカスタムエラーページを使うことができるようになりますが、カスタムエラーページで例外が発生した場合はデフォルトエラーページが表示されます。
CGIの負荷を軽減するためなど、表示されるHTMLをファイルに保存しておくにはCKComponent#to_s()を使います。このメソッドはコンポーネントをHTMLに変換した文字列を返します。
class MainPage < CKComponent
def save_to_file( filename )
open(filename, ‘w+’) do |f|
f.write to_s()
end
end
end
CGIKitはフォームデータの文字コードを自動的に変換してからコンポーネントに代入します。文字コードを設定するには、アプリケーション環境設定のchar_code属性に「jis、sjis、euc」のいずれかを指定します。デフォルトはnilで、文字コードを変換しない設定になっています。
コンポーネントを表示する代わりに他のURLへリダイレクトするには、CKResponse#set_redirect()でリダイレクト先のURLを設定します。リダイレクト先を設定すると、コンポーネントを返す・返さないに関わらず指定したURLにリダイレクトされます。
class MainPage < CKComponent
def redirect
# リダイレクト先を設定
response.set_redirect(‘http://www.ruby-lang.org/’)
# コンポーネントを返しても上記のURLにリダイレクトされる
nextpage = page(‘NextPage’)
return nextpage
end
end
アプリケーション環境設定のmain属性を使うと、アプリケーションに最初にアクセスしたときに表示するコンポーネントを変更することができます。デフォルトではMainPageコンポーネントに設定されています。
次にコンポーネントをOtherPageに変更するコードを示します。こうすると、最初にアプリケーションにアクセスしたときにMainPageではなくOtherPageが表示されるようになります。
app = CKApplication.new app.main = “OtherPage”