アクション項目からのページ プロデューサの使用
一般的なページ プロデューサ コンポーネントの使い方では、HTMLFile プロパティを使って HTML テンプレートを含むファイルを指定します。OnAction イベント ハンドラは、Content メソッドを呼び出して、テンプレートを最終的な HTML シーケンスに変換します。
procedure WebModule1.MyActionEventHandler(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); begin PageProducer1.HTMLFile := 'Greeting.html'; Response.Content := PageProducer1.Content; end;
void __fastcall WebModule1::MyActionEventHandler(TObject *Sender, TWebRequest *Request, TWebResponse *Response, bool &Handled) { PageProducer1->HTMLFile = "Greeting.html"; Response->Content = PageProducer1->Content(); }
Greeting.html は、次の HTML テンプレートを含んだファイルです。
<HTML> <HEAD><TITLE>Our Brand New Web Site</TITLE></HEAD> <BODY> Hello <#UserName>! Welcome to our Web site. </BODY> </HTML>
OnHTMLTag イベント ハンドラは、HTML 内のカスタム タグ(<#UserName>)を実行時に置換します。
procedure WebModule1.PageProducer1HTMLTag(Sender : TObject;Tag: TTag; const TagString: string; TagParams: TStrings; var ReplaceText: string); begin if CompareText(TagString,'UserName') = 0 then ReplaceText := TPageProducer(Sender).Dispatcher.Request.Content; end;
void __fastcall WebModule1::HTMLTagHandler(TObject *Sender, TTag Tag, const AnsiString TagString, TStrings *TagParams, AnsiString &ReplaceText) { if (CompareText(TagString,"UserName") == 0) ReplaceText = ((TPageProducer *)Sender)->Dispatcher->Request->Content; }
要求メッセージのコンテンツが文字列 Mr. Ed であれば、Response.Content の値は次のようになります。
<HTML> <HEAD><TITLE>Our Brand New Web Site</TITLE></HEAD> <BODY> Hello Mr. Ed! Welcome to our Web site. </BODY> </HTML>
メモ: この例では、OnAction イベント ハンドラを使用してコンテンツ プロデューサを呼び出し、応答メッセージのコンテンツを割り当てています。設計時にページ プロデューサの HTMLFile プロパティを割り当てる場合は、OnAction イベント ハンドラを記述する必要はありません。その場合は、アクション項目の Producer プロパティの値に PageProducer1 を割り当てるだけで、上記の OnAction イベント ハンドラと同じ結果を得ることができます。