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)}" />
ってかいておけば、テキストボックスにあらかじめ値が入った状態になります。 またたとえば、次に操作して登録画面へ遷移しようとして入力エラーとなってまた○○入力画面に戻ってきた場合も、その値が再現されますね。
入力エラーなどで元画面に戻るようなケースで、テキストボックスに入力された値を遷移後の元画面で受け取りたいことがありますが、Slim3はリクエストパラメータ request.getParameter("hoge") の値を自動でrequest.setAttribute("hoge",[値]); してくれるようで、遷移先の元画面でもスッキリ値を取得することができます。これ便利です。
${f:h(textInput)}
は request.getAttribute("textInput"); と同等の意味ですが
<input type="text" name="textInput" value="${f:h(textInput)}" />
このようにアクセスして値を取得可能です。
たとえば
<form action="/index"> <input type="text" name="textInput" value="${f:h(textInput)}" /> <input type="submit" value="登録" /> </form> textInput: ${f:h(textInput)} <br />
で
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)} ではリクエストパラメータの値は参照してないっぽいですね。
この記事は
現在のアクセス:2989