0

私はjspが初めてです。jspページに1つの「宣言」と1つの「スクリプトレット」を書いています。

しかし、宣言と「スクリプトレット」で作成した変数は、

範囲。つまり、ページ スコープ、リクエスト スコープ、アプリケーション スコープなどです。

「success.jsp」という名前の次の jsp ファイルを次に示します。

     <%! int x=20; %>//x is not created in any scope.
    <% int y=30; %>// y is not created in any scope.

   <script>

  var p="${x}";//here,variable p does not get any value.
  var q="${y}";//here,variable does not get any value.

  </script>

変数「x」と「y」がスコープのいずれにも作成されない理由と、「x」および「y」変数に格納されている値を取得する方法。

4

3 に答える 3

0

jsps を理解するための最良の方法は、jsps がひそかに Java クラスに解釈されていることだと思います。しかし、より具体的には、各行を評価した後、行ごとに html を書き出す関数に入れられています。したがって、<% %> タグを使用できるのはなぜですか。そのため、<% %> タグは実際には評価される行ですが、html には書き込まれません。評価は、結果の Java メソッドのスコープに格納されます。したがって、最終的に何が起こるかは次のようになります。

public void SendHtmlPage() {
  int x=20; 
  int y=30; 

  Print("<script>");

  Print("var p=\"${x}\"\;"); //This gets evaluated to getSession.getAttribute("x")
                             //Since there is no x in the session, it returns null
  Print("var q=\"${y}\"\;"); //Same here

  Print("</script>);
}

そう。これが、x と y がスクリプトレット内で認識されない理由です。ただし、メソッド スコープの変数をセッション スコープに保存する方法があります。これを確認してください: JSP スクリプトレットから JSTL に変数を渡すことはできますが、JSTL から JSP スクリプトレットにエラーなしで渡すことはできません。

幸運と幸せなコーディング。:)

于 2013-11-05T03:43:46.787 に答える
0

このようにコードを変更します

var p = <%=x%>;
var q = <%=y%>;
于 2013-11-05T03:44:04.990 に答える
0

ご指摘のとおり、jsp-scriplet コードによって作成された変数は <%! int x=20; %>、コンパイルされた jps ページ (サーブレット クラスに内部的にコンパイルされた任意の jsp ページ) 内で直接宣言されているため、どのスコープでも使用できません。
jsp ページの残りの部分で変数xを使用するには、次の 2 つのオプションがあります。

  1. jsp-scriptlet 式<%= x %>を使用します。この場合、javascipt フラグメント内のコードは次のようになります。

    var p = "<%= x%>";
    var q = "<%= y%>";

  2. 変数x、yをpageContextスコープ内に手動で保存すると、EL から使用できるようになります。

    <%
    int x=20;
    int y=30;
    pageContext.setAttribute("x", x);
    pageContext.setAttribute("y", y);
    %>

とは異なりますのでご注意ください。<%! int x = 20; %><% int x=20; %>

于 2013-11-05T16:46:05.643 に答える