あなたの質問に対する私のコメントを答えにまとめようとします。彼らはそれを解決したようです.
最初に理解しておくべきことは、サーバー側コードの解析と実行 (JSP ページ) とクライアント側コードの解析と実行 (HTML と JavaScript) の違いです。このprogrammers.stackexchange.comの質問に対する最高評価の回答で簡単な概要を読むことができます。詳細については、Wikipedia のserver-side scriptingおよびclient-side scripting に関する記事を参照してください。サーバー側スクリプトに関するクライアント側スクリプトの記事から学ぶべき重要な概念は次のとおりです。
[サーバー側スクリプト] は、Web ブラウザーが理解できる形式 (通常は HTML) で出力を生成し、ユーザーのコンピューターに送信します。ユーザーはスクリプトのソース コードを見ることができず (作成者がコードを個別に公開しない限り)、スクリプトが実行されたことにさえ気付かない可能性があります。サーバー側のスクリプトによって作成されたドキュメントには、クライアント側のスクリプトが含まれている場合があります。
セットアップに関して言えば、これは、ブラウザを介して JSP ページを要求すると、ブラウザが JSP ページをホストしているサーバーに、ブラウザがそのページを必要としていることを伝えることを意味します。次に、サーバーは JSP ページを実行して、本質的に純粋な HTML と JavaScript (そのように記述した場合は CSS も) であるドキュメントを生成し、ブラウザに送信します。ブラウザは JSP コードを認識しません。サーバーが JSP ページの解析と実行を完了するまでに、${someExpression}
(JSP EL ステートメント) のすべてのインスタンスと他の JSP 固有の式 (<spring:xx>
タグなどの taglibs など) は、クライアント側の同等のものに解決されます。基本的な JSP EL ステートメント ( ${...}
) の場合、これらは何らかの文字列値に解決されます。その EL ステートメントを JSP の JavaScript に巧みに配置した場合、次のようになります。console.log("${myVariable}");
の場合、EL ステートメントの出力に依存する JavaScript コードを動的に生成します (この例では、 のように解決されますconsole.log("myVariable-value");
)。
この時点まで、サーバーは JSP コードを実行しているだけです (それ以外の場合は、既にページにある HTML/JS/CSS をそのまま残します)。JavaScript は解析または実行されていません。この最終的な「レンダリングされた」ページは、サーバーが JSP の実行を完了した後、純粋な HTML/JS/CSS としてクライアント ブラウザーに送信され、クライアント ブラウザーはそれを受信して解析/実行します。この時点で、ブラウザーはconsole.log("myVariable-value");
、JSP コードがそれを生成したことを認識または気にせずに、 のようなものを見て、それを実行します (有効な JS を生成するために EL ステートメントを巧みに配置したため)。
この長い説明は、次のことができることを意味します。
サーバー側 JSP:
alert("${createBehavior.behaviorRevisionAllowed}");
サーバーからクライアント ブラウザーに送信される結果のコード:
alert("false");
ブラウザでコードを実行した後の結果:alert
ボックスに値が表示false
されます。
サーバー側 JSP:
console.log("${createBehavior.behaviorRevisionAllowed}");
サーバーからクライアント ブラウザーに送信される結果のコード:
console.log("false");
コードがブラウザーで実行された後の結果: 値false
はコンソールに記録されます。
サーバー側 JSP
return [$('#some-id'), "<spring:message code='BH-MS-0070'/>"];
サーバーからクライアント ブラウザーに送信される結果のコード:
return [$('#some-id'), "some-spring-message-string"];
ブラウザーでコードが実行された後の結果: JavaScriptreturn
ステートメント内の配列は、値"some-spring-message-string"
を 2 番目の要素として作成されます。
「EL変数」に関するコメントの質問から、「EL変数」と言ったとき、 などのELステートメントは、 など${someStatement}
の変数名と同じくらい単純なステートメントである可能性があるという事実を意味していました${createBehavior.behaviorRevisionAllowed}
。この EL ステートメントでは、変数名だけが表示され、その変数を見つけてその値を取得${createBehavior.behaviorRevisionAllowed}
し、実際の値に置き換えようとします。
さらに説明が必要な場合はお知らせください。