JavaScript内でJavaEEのオブジェクトを華麗に使いたい
実際に体験した人じゃないとわかりにくいかもしれないけど、
JavaScriptを組んでいるとJavaのセッションスコープにとかに入っているXXっていう値と比較したいなどの場面がよくある。
例えば、ボタンを消したりとか要素を非表示にしたりとか。
初期表示で消すだけでよいならJSPでcタグとEL式なんかをあわせてやればよいのだけど、画面内での操作によっても変わる場合は、JavaScriptを使う必要がある。
JavaScriptとJavaの連携は、以下みたいな感じにすると出来ちゃうんだけど、JavaScriptの中にスクリプトレットを書くのはあんまり。
if (aaa == <%= req.getParameter("aaa")%>) { // aaaがリクエストスコープに入っているaaaと同じだった時の処理 // ボタン消したり・要素を非表示にしたり }
そもそもこんなソースをかけることを知らない人も多いしね。
で、うちのプロジェクトで良く使っているのが、JSP内で一旦hiddenに入れてからそれをJavaScriptで取り出すという方法。
<input type="hidden" name="aaa" value="${aaa}" id="aaa">
if (aaa == $("#aaa").val()) { // }
うーん。hiddenを使用するのがいただけない。リクエストで飛ばしたいのか画面内で使用したいのかがわからなくなって、メンテナンス性が悪い。なので個人的には、この方法は嫌い。
最近好んで使っているのは、以下のような方法。
<div id="aaaDiv" style="display:none;"><c:out value="${aaa}"/></div>
if (aaa == $("#aaaDiv").text()) { // }
divを使っているのが微妙なんだけど、画面内で使う値とリクエストで飛ばしたい値を分けられるので、コチラのほうが、hiddenを使うよりわかりやすい。
とはいえ、JSPに余計なソースを記述しなければいけない。もっとシームレスにつなげる方法ってないのかかしら。