妄想その2
昨日の続き。足し算。
やっぱメソッド呼ばれたやつがわかってほしいお年頃。
どれが呼ばれたのかわからないようじゃあ、苦しい感じでござるですよ。
というわけで@ActionParamとつけると、押されたボタンに対応するメソッドがよばれたりしたら素敵♪
これもAction統合型のPageモデル(勝手にそう名づけた)ならでは。
PageはあるURL以下にひもづいたActionの集合ってところ。
あと、やっぱバリデーションは千差万別だから中途半端にフレームワーク側でやるよりも
自前でやったほうがいいんじゃないかなあというのがオレの意見。というわけでバリデーションは自分で書きましょう。
何か使うのであれば、CommonsよりもOvalがお奨めです。
package examples.page; @RequestScope @Page("add") public class AddPage { @Default public Navigation index(Context context) { return Redirect.to("jsp/add.jsp"); } /** * addボタンがPOSTで押されたときだけ呼ばれる */ @POST @ActionParam public Navigation add(Context context) { //Validationはここらでお好きにどうぞ。 Request request = context.getRequest(); Integer arg1 = Integer.valueOf(request.getParameter("arg1")); Integer arg2 = Integer.valueOf(request.getParameter("arg2")); request.setAttribute("arg1", arg1); request.setAttribute("arg2", arg2); request.setAttribute("result", new Integer(arg1.intValue() + arg2.intValue())); return Forward.to("jsp/add.jsp"); } /** * addAndMoveボタンがPOSTで押されたときだけ呼ばれる */ @POST @ActionParam public Navigation addAndMove(Context context) { //Validationはここらでお好きにどうぞ。 Request request = context.getRequest(); Integer arg1 = Integer.valueOf(request.getParameter("arg1")); Integer arg2 = Integer.valueOf(request.getParameter("arg2")); request.setAttribute("result", new Integer(arg1.intValue() + arg2.intValue())); return Forward.to("jsp/addResult.jsp"); } }
<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" errorPage="/error/debug.jsp"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>足し算画面</title> </head> <body> <!-- Functionは適当。 --> <form action="${t:url('/add')}" method="post"> <input type="text" name="arg1" /> <br /> <input type="text" name="arg2" /> <br /> <span>${result}</span><br /> <!-- addを押したときはaddメソッドが呼ばれる --> <input type="submit" name="add" value="同一ページ"/> <!-- addAndMoveを押したときはaddAndMoveメソッドが呼ばれる --> <input type="submit" name="addAndMove" value="結果ページ"/> </form> </body> </html>