BBSその7 Postされたデータの受け取り
さてさて、そんなこんなで無事入力Formを表示して、
投稿が出来るようになりました。
では、受け取り側の処理に移っていきましょう。
というわけでまずは、VOを用意します。
package click.bbs.logic.vo; import java.io.Serializable; public class Article implements Serializable{ private static final long serialVersionUID = -1L; private String title; private String name; private String email; private String message; private String password; private String color; public String getColor() { return color; } public void setColor(String color) { this.color = color; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String toString() { StringBuffer buffer = new StringBuffer(); buffer.append("[Article:"); buffer.append(" title: "); buffer.append(title); buffer.append(" name: "); buffer.append(name); buffer.append(" email: "); buffer.append(email); buffer.append(" message: "); buffer.append(message); buffer.append(" password: "); buffer.append(password); buffer.append(" color: "); buffer.append(color); buffer.append("]"); return buffer.toString(); } }
でonPostあたりで、この値をVOに移して、ロジックで〜〜〜
でいいとは思うのですが、値の詰め替えというのはえてして面倒くさいものです。
SeasarだったらDxoだろうし、CommonsだったらBeanUtilsだろうし・・・
さてそういうわけでClickだったら、form.copyToです。
というわけでどんな便利な方法をとろうとも、
現在のパーツの名前と、VOのフィールド名だとよろしくないわけですので、
すこしパーツの名前を変えましょう。
package click.bbs.ui.page; import net.sf.click.control.Form; import net.sf.click.control.PasswordField; import net.sf.click.control.Radio; import net.sf.click.control.RadioGroup; import net.sf.click.control.Submit; import net.sf.click.control.TextArea; import net.sf.click.control.TextField; import net.sf.click.extras.control.EmailField; import click.bbs.logic.vo.Article; public class BbsPage extends net.sf.click.Page { private Form form = new Form("form"); public BbsPage(){ TextField titleText = new TextField("title", "タイトル"); form.add(titleText); TextField nameText = new TextField("name", "名前", true); form.add(nameText); EmailField emailText = new EmailField("email", "e-mail"); form.add(emailText); TextArea messageArea = new TextArea("message", "本文", true); messageArea.setCols(40); messageArea.setRows(10); form.add(messageArea); PasswordField passwordText = new PasswordField("password", "パスワード", true); form.add(passwordText); RadioGroup colorRadio = new RadioGroup("color", "文字色"); Radio colorBlack = new Radio("black", "黒"); Radio colorRed= new Radio("red", "赤"); Radio colorBlue = new Radio("blue", "青"); colorRadio.add(colorBlack); colorRadio.add(colorRed); colorRadio.add(colorBlue); colorRadio.setVerticalLayout(false); colorRadio.setValue(colorBlack.getValue()); form.add(colorRadio); Submit submitBtn = new Submit("submitBtn", "投稿"); form.add(submitBtn); addControl(form); } @Override public void onPost() { Article article = new Article(); form.copyTo(article, true); System.out.println(article); } }
というわけでControlのコンストラクタのnameをVOにあわせました。
どちらにあわせるのか?などは最初に決めておくといいかもしれません。
せっかくVOとしてプレゼンテーションから切り出そうとしているので、
名前もあまり画面っぽくしない方がいいかもしれないですね。