@CarlosGavidia (ペルー人) が説明したように、スクリプトレットはサーバー側で実行され、JavaScript (および jQuery や Dojo などの他のフレームワーク) はクライアント側 (ブラウザー クライアントなど) で実行されます。また、スクリプトレットの使用は強くお勧めしません。詳細な説明は次のとおりです: How to avoid Java code in JSP files?
最後のリンクにアクセスした場合、 ELおよびJSTLを使用して、ページ コンテキスト (PageContext)、リクエスト (ServletRequest)、セッション (HttpSession)、および/またはアプリケーション (ServletContext) 属性にアクセスする必要があることがわかります (関連情報: c:set を介して jsp:include にパラメータを渡す方法は? JSP の変数のスコープは? )。
この背景から、DOM の一部として設定されるか、JavaScript コードに挿入されない限り、リクエスト属性 (または Java コードからの他の属性) に直接アクセスできないことが理解できるようになりました。両方のケースの例を示します:
request 属性を DOM の一部として設定します。
<input type="hidden" id="hidReqAttr" value="${location}" />
<script type="text/javascript">
function foo() {
var fromJavaSide = document.getElementById("hidReqAttr").value;
//fromJavaSide value will be ${location}
}
</script>
JavaScript に request 属性を直接挿入します。
<script type="text/javascript">
function foo() {
var fromJavaSide = '<c:out value="${location}" />';
//fromJavaSide value will be ${location} as string
}
</script>
これらのアプローチのいずれかを使用すると、JavaScript を使用して Java サーバー変数値を操作できることを意味しますが、JavaScript 側でのみ機能し、サーバー側で設定されたリクエスト属性値には影響しません。言い換えると:
<script type="text/javascript">
function foo() {
var fromJavaSide = '<c:out value="${location}" />';
//fromJavaSide value will be ${location} as string
fromJavaSide = fromJavaSide + '_modified';
//last line affects only the JavaScript variable, not the request attribute value
}
</script>
したがって、「td」要素に入った場所の 1 つが「USA」である場合、私の Javascript 関数は、周囲の境界線を赤、白、青にするなど、「USA」要素に固有の処理を行います。
ID を持つ HTML コンポーネントを使用するか、CSS クラス名を に適用して<td>
、目的の値がどこで得られるかを確認します。例として使用"USA"
:
<td class="${location eq 'USA' ? 'usaStyle' : 'commonStyle'}">${location}</td>
<script type="text/javascript">
function foo() {
var usaTDs = document.getElementsByClassName('usaStyle');
//now you have all TDs with usaStyle that has your `USA` text
}
</script>
あなたのコメントに基づいて、リクエストパラメーターにもアクセスしたいと考えています(おそらくクエリ文字列から)。それらを取得するために使用${param.parameterName}
します。上記の EL リンクの詳細については、リクエスト パラメーターの取得やその他の機能について説明しているImplicit EL objectsセクションを確認してください。