web-dev-qa-db-ja.com

javascript内のjstl

Javascript内でjstlを使用することは可能ですか?

<c:set var="abc" value="yes"/>を設定しようとしています

その後、htmlでこの値にアクセスし、いくつかのコードを実行します。私の問題は、javascriptの条件がfalseであっても、c:setが常に実行されていることです。

<script type="text/javascript">
var v1 = false;
<c:set var"abc" value="yes"/>

if(v1){
  <c:set var"abc" value="no"/>
}
</script>

上記のコードでは、v1がfalseの場合でも、「no」がabcに設定されています。

11
coder247

サーバーサイドのJSP解釈について話しているときに、「Javascriptの内部」であるという考えには意味がありません。そのドメインに関する限り、Javascriptのようなものはありません。

したがって、はい、あなたが次のようなことをしたいという意味であれば、それは可能です

_var something = '${abc}';
_

引用符や特殊文字には注意する必要があることに注意してください。 JSTL fn:escapeXml()関数は、ブラウザによってJavascriptソースとして解釈されるページの一部にJSP変数を補間する場合には役に立ちません。 JSONライブラリを使用して文字列をエンコードするか、独自のEL関数を記述してそれを行うことができます。

21
Pointy

これはかなり古いスレッドですが、同じ問題が発生したときに遭遇したスレッドです。自分で解決策を考えたので、将来誰かに役立つ場合に備えてここに投稿します。

Html(またはjsp)ファイルは、javascriptソースとして宣言された外部ファイル内のテキストを探します。

Tomcat(または同様のもの)は、拡張子が.jspのファイル内のJSTLタグのみを解釈します(または他のタグも解釈しますが、この回答には関係ありません)。

したがって、.jsファイルの名前を.jsp拡張子に変更します(たとえば、javascript.jsをjavascript_js.jspに変更します)。

Javascript_js.jspの先頭にこれらの行を追加します。

<%@ page language="Java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://Java.Sun.com/jsp/jstl/core" prefix="c"%>

コードは変更しないでください。

もちろん、ヘッダーでc:以外のものを使用する場合は、プレフィックスを追加する必要もあります。

Eclipseを使用している場合(他のIDEについてはわかりません)、JavaScriptファイルではないと見なされ、さまざまなキーワード(var、functionなど)の配色、変数名のオートコンプリート、および自動インデントが失われます。

IDEをだますために、追加することができます

// <script> 

jsコメントとして、実際のコードの前( "<%@"宣言の後)、および

// </script>

ファイルの最後に、これもjsコメントとして。

それは私のために働いた。

4
Dan
<script>
    <c:set var="myVal" value="Hello"/> 

    var val1="${myVal}";

</script>
3
Gautam Viradiya