Top / GoogleAppEngine / Slim3 / TIPS集

リクエストパラメータにアクセスする

入力エラーなどで元画面に戻るようなケースで、テキストボックスに入力された値を遷移後の元画面で受け取りたいことがありますが、Slim3はリクエストパラメータ request.getParameter("hoge") の値を自動でrequest.setAttribute("hoge",[値]); してくれるようで、遷移先の元画面でもスッキリ値を取得することができます。これ便利です。

${f:h(textInput)}

は request.getAttribute("textInput"); と同等の意味ですが

<input type="text" name="textInput"  value="${f:h(textInput)}" />

このようにアクセスして値を取得可能です。

たとえば

  • index.jsp
    <form action="/index">
     <input type="text" name="textInput"  value="${f:h(textInput)}" />
     <input type="submit"  value="登録" />
     </form>
     textInput: ${f:h(textInput)} <br />

  • IndexController?
    public class IndexController extends Controller {
      @Override
      public Navigation run() throws Exception {
        return forward("index.jsp");
      }
    などだった場合、textInput に「あ」と入れてみたところ、
<form action="/index">
 <input type="text" name="textInput"  value="あ" />
 <input type="submit"  value="登録" />
</form>
textInput: あ <br />

となりました。

ちなみにControllerクラス内で

request.removeAttribute("textInput");

とかしてみたら、${f:h(textInput)}としても値は取得できなかったので、${f:h(textInput)} ではリクエストパラメータの値は参照してないっぽいですね。

オブジェクトのフィールドの値を次の画面で使用したい

Foo foo = new Foo();
foo.setBar("aaa");
BeanUtil.copy(foo, request);

とすることでフィールドの内容をRequestスコープにコピー、すなわち

request.setAttribute("bar",foo.getBar());

って事ができます。これでJSPでは ${f:h(bar)} でアクセス可能です。

たとえば○○一覧画面から一つを選択し、そこからコピー新規、みたいな画面を作るときに、遷移先の画面(○○入力画面)で

<input type="text" name="bar"  value="${f:h(bar)}" />

ってかいておけば、テキストボックスにあらかじめ値が入った状態になります。 またたとえば、次に操作して登録画面へ遷移しようとして入力エラーとなってまた○○入力画面に戻ってきた場合も、その値が再現されますね。

関連リンク


この記事は

選択肢 投票
おもしろかった 0  
そうでもない 0  

Top / GoogleAppEngine / Slim3 / TIPS集

現在のアクセス:2982


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2012-05-16 (水) 07:40:14 (4356d)