レスポンスにはHTMLページ、データ、フォワード、リダイレクトがあります。
テンプレートのHTMLファイルをビューコンポーネントで変化させてクライアントに返します。
<view name="message" class="hello.MessageView" /> <page name="hello" template="simple.html" view="message(message, こんにちは)" />
テンプレートはごく普通のHTMLファイルです。プログラムから操作するために要素にid属性を付けておくと便利ですが、必須ではありません。ビュークラスはidやXPathでHTMLの要素を検索して新しい要素を追加したりテキストを書き換えたりできます。
ビューはページに含まれるコンポーネントで、HTMLテンプレートに中にデータを表現します。Viewクラスを継承する必要があります。
public class MessageView extends View { public HTMLTagNode format(HTMLTagNode template, String[] params, ContextAccessor acc) { // パラメータが2つ以上あったらタイトルとメッセージを変更する if ( params.length >= 2 ) { template.findTag("/html/head/title").setText(params[1]); template.findTagById(params[0]).setText(params[1]); } return template; } }
formatメソッドのパラメータparamsはpage要素のview属性で指定されたパラメータが渡されます。ビュークラスは設定ファイルからのパラメータ、セッションやレスポンスオブジェクトの属性を使ってテンプレートをフォーマットします。
上記の例のsimple.htmlは下のように変化します。
テンプレート | 出力 |
---|---|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html;charset=Windows-31J"> <title>タイトル</title> </head> <body> <div id="errorlist"><!-- ここにエラーを表示 --></div> <div id="message"> </div> </body> </html> |
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html;charset=Windows-31J"> <title>こんにちは</title> </head> <body> <div id="errorlist"><!-- ここにエラーを表示 --></div> <div id="message">こんにちは</div> </body> </html> |
HTML以外の形式のレスポンスはデータクラスで出力します。データクラスはResponseインタフェースを実装する必要があります。outputメソッドでContextAccessorからHttpServletResponseオブジェクトを取得してOutputStreamに内容を出力します。画像やXMLなどストリームに出力できるデータなら何でもレスポンスとして返すことができます。
リクエストをフォワードします。
クライアントにリダイレクトを返します。
$Id: response.html,v 1.1 2005/04/29 08:14:13 sugimotokenichi Exp $