ResPageを作る
返信ページには入力フォームと親メッセージが表示されているものとします。
これらはすでにコンポーネントとして作っていますので、新たに用意するものは特にありません。
ResPage.html
<html> <head><title>ResPage</title></head> <body> <div align="center"> <span jwcid="messageComponent"/> </div> <hr/> <span jwcid="submitComponent"/> </body> </html>
ページの上に引用元のメッセージが表示され(messageComponent)、下の方に入力フォーム(submitComponent)を表示します。
ResPage.jwc
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE page-specification PUBLIC "-//Apache Software Foundation//Tapestry Specification 3.0//EN" "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd"> <page-specification class="bbs.view.ResPage"> <property-specification name="parentMessage" type="bbs.data.Message" persistent="no"/> <property-specification name="resMessage" type="bbs.data.Message" persistent="no"/> <component id="messageComponent" type="MessageComponent"> <binding name="message" expression="parentMessage"/> </component> <component id="submitComponent" type="SubmitComponent"> <binding name="submitMessage" expression="resMessage"/> </component> </page-specification>
このファイルも、とくに変わった所はありません。
MessageComponentにはparentMessageをバインドし、SubmitComponentにはresMessageをバインドすると言うものです。
ただ、これはあとで困った事になります・・・SubmitComponentには
まぁ、あとで対処するとして、ともかくこうしておきます。
ResPage.java
package bbs.view; import org.apache.tapestry.html.BasePage; import bbs.data.Message; /** * 返信ページ * * @author toolkit * @version $Revision$ */ public abstract class ResPage extends BasePage { public abstract Message getParentMessage(); public abstract void setParentMessage(Message parentMessage); public abstract Message getResMessage(); public abstract void setResMessage(Message resMessage); }
こうしておいて、MessageComponent内のresActionで
MessageComponent.java(抜粋)
public void resAction(IRequestCycle rc) { ResPage nextPage = (ResPage) rc.getPage("ResPage"); Message parent = getMessage(); Message res = new Message(); res.setDataContext(parent.getDataContext()); //DataContextを同じものにする res.setSubject("Re:" + parent.getSubject()); //parentのタイトルのアタマに「Re:」を付ける parent.addToChildren(res); //resをparentの子供に付け加える nextPage.setResMessage(res); nextPage.setParentMessage(parent); rc.activate(nextPage); }