1. ホーム
  2. java

[解決済み] javascriptでExpression言語を使うには?

2022-02-24 05:35:28

質問

JSP ファイルに以下のようなチェックボックスがあります。

<input type="checkbox" name="vehicle" value="Bike"
    onclick="javascript:selectCustomers(${sessionScope.custId});">

以下のようなエラーが発生します。

org.apache.jasper.JasperException: customer.jsp(1419,33) タグファイルの TLD または属性ディレクティブによると、次のようになります。
        属性 onclick はいかなる式も受け付けません。

JavaScriptで式言語は使えないのか(私の場合は onClick() イベント)ですか?

解決方法は?

JSPページが呼び出されると、次のような順序で処理が行われます。

  • サーバーは、.jsp がすでにコンパイルされているかどうか、そして最後にコンパイルされたときから変更されているかどうかを確認します。
  • サーバーはjspをJasperコンパイラに通し、jspをJavaコードに解釈します。Java以外のもの(CSS、HTML、JavaScriptなど)はStringに格納されます。
  • Javaコードがコンパイルされ、実行されます。
  • 結果がレスポンスに配置され、ユーザーに送信されます。

では、あなたの発言は。 ${sessionScope.custId} はHTMLがユーザーに送信される前に実行され、入力された selectCustomers() 関数は、呼び出す前にすでに設定されています。


より詳しい情報は、私の別の投稿をご覧ください。 JSP内部 ListItems onclick

検証方法は?

ブラウザ上で右クリックし、ビューソースをご覧ください。


以下のサンプルコードをお試しください。

囲む ${...} を一重引用符で囲んでください。

<c:set var="custId" value="1234" scope="session" />

Before :
<c:out value="${sessionScope.custId}"></c:out>

<input type="checkbox" name="vehicle" value="Bike"
    onclick="javascript:selectCustomers('${sessionScope.custId}');">

<c:set var="custId" value="4321" scope="session" />

After:
<c:out value="${sessionScope.custId}"></c:out>

ソースコードを見る ( ブラウザで右クリックすると表示されます )

Before : 1234

<input type="checkbox" name="vehicle" value="Bike"
    onclick="javascript:selectCustomers('1234');">  

After: 4321