====== ページジャンプ ====== hello, world アプリでは、画面に表示されるだけで何も操作ができませんでしたが、次の例では、マウスクリックでページの更新を行います。 ===== aタグを使ったページジャンプ ===== htmlのリンク(aタグ)を使って、指定のアクションを呼び出す事をしてみましょう。 先のhello, worldアプリを改造します。 まず、アクションを2つ追加します。 require 'al_template' class HelloController < AlController def action_index() @my_message = "Hello world." AlTemplate.run("index.rhtml") end def action_foo() @action = "foo" AlTemplate.run("foobar.rhtml") end def action_bar() @action = "bar" AlTemplate.run("foobar.rhtml") end end デフォルトの index.rhtml を以下の通り書き換えて、指定のアクションを呼び出すためのリンク(aタグ)を付け加えます。 <%= header_section %> Test <%= body_section %>

<%=h @my_message %>

">action_foo()を実行 ">action_bar()を実行 <%= footer_section %>
追加したメソッド用のテンプレートファイルを新規作成します。 <%= header_section %> <%= body_section %> action_<%=h @action %> が呼ばれました。
デフォルトへ <%= footer_section %>
実行すると、2つのリンクが表示されます。 http://localhost:10080/index.rb?ctrl=my_hello {{prog_cgi:pj_index.png?nolink|}} 左のリンクをクリックすると action_foo が、右のリンクをクリックすると action_bar が実行されるページへジャンプします。そこでそれぞれのアクションが実行され、画面の表示が変わります。\\ ジャンプ先の画面で【デフォルトへ」のリンクをクリックすると、元の画面(action_index)にジャンプします。 {{prog_cgi:pj_foo.png?nolink&400|}} {{prog_cgi:pj_bar.png?nolink&400|}} この例では、index.rhtmlで、href へ make_uri(action:"foo") もしくは、make_uri(action:"bar") を使って、指定のアクションを呼び出すURLを生成して指定しています。 生成された aタグ全体 action_foo()を実行 action_bar()を実行 また、foobar.rhtmlでは、make_uri()メソッドをパラメータなしで呼び出して、デフォルトのアクションが呼び出されるURLを生成しています。 ===== ボタンをクリックしてページジャンプ ===== aタグではなく、ボタンをクリックした時に、指定のアクションを呼び出す事をしてみます。 ボタンには、クリックした時の規定の動作は無いので、JavaScriptで定義する必要があります。 デフォルトテンプレートへ、ボタンを表示するタグを追加します。 '"> {{:prog_cgi:pj_button.png?nolink|}} ===== httpリダイレクトによるページジャンプ ===== httpには、 [[https://developer.mozilla.org/ja/docs/Web/HTTP/Redirections|リダイレクトの仕組み]] があり、Aloneもそれをサポートしています。 リダイレクトを使って、action_foo を呼び出してみましょう。 コントローラへ、リダイレクト用のアクションを1つ追加します。 def action_redirect() Alone.redirect_to( make_uri(action:"foo") ) end デフォルトテンプレートへ、先のアクションを呼び出すためのリンクを追加します。 ">リダイレクト経由でaction_foo()を実行 {{:prog_cgi:pj_redirect.png?nolink|}} 処理の流れは以下のようになっています。 - リダイレクトのためのリンクをクリックする - ブラウザは、指定のURLをアクセスする。ここは、aタグを使ったページジャンプです。 - action_redirect()が実行される。 - Alone.redirect_to()でセットされたURLにリダイレクトするようブラウザに指示を返す。 - ブラウザは、指示されたURLを再度アクセスしなおす。ここは、httpリダイレクトによるページジャンプです。 - action_foo()が実行される。 ==== 注意点 ==== httpリダイレクトは、httpヘッダを使って実現されています。 Aloneでは、メモリの節約のため htmlの出力をバッファリングしません。そのため、Alone.redirect_to()をコールする前に何らかのコンテンツを表示してしまうと、既にhttpヘッダが出力された後のため、この仕組みはうまく動作しません。 つまり以下のようなコードは動作しません。 def action_redirect() puts "Debug print..." Alone.redirect_to( make_uri(action:"foo") ) end