JSPのスクリプトレットとjavascriptで同じ変数を使ってハマった話

あらすじ

  • タイトルの通り
  • 自分で書くときは同じ変数名使わないよ!

環境

  • jsp-2.3

JSPのソース

jspの中の、javascriptの中にvar piyoという変数がある。

javascript内でスクリプトレットでもString piyoという変数を定義している。

<!-- 中略 -->
<SCRIPT>
  function hoge(){
    <%String piyo = "";%>
    var piyo = "";

    <%piyo = "initial_jsp";%>
    piyo = "initial_js";
    
    alert("1 <%=piyo%>");
    alert("2 "+piyo);
    
    <%piyo = "update_jsp";%>
    piyo = "update_js";
    
    alert("3 <%=piyo%>");
    alert("4 "+piyo);
  }
</SCRIPT>
<!-- 中略 -->

実行結果(アラート)

このfunctionを呼びだした時の実行結果。(アラート)

1 initial_jsp
2 initial_js
3 update_jsp
4 update_js

出力されたソース

出力されたページのソース。

<!-- 中略 -->
<SCRIPT>
  function hoge(){
    var piyo = "";

    piyo = "initial_js";

    alert("1 initial_jsp");
    alert("2 "+piyo);

    piyo = "update_js";

    alert("3 update_jsp");
    alert("4 "+piyo);
  }
</SCRIPT>
<!-- 中略 -->

スクリプトレットはサーバーで処理して返すから、 実際にレンダリングされた結果を見ればわかるけど同じ変数名だと気づくのに時間がかかった。(´Д`;)

参考