6.

JSP「The jsp:param action must not be」エラーの原因と正しい使い方

編集
この記事の要点
  • / / 子要素としてのみ使える
  • メッセージ: The jsp:param action must not be used outside of jsp:include / jsp:forward / jsp:params
  • 原因: 単独で を書いた / 別タグの中に書いた
  • 対処: 親 ... でラップ
  • 子 JSP では ${param.title} または request.getParameter() で受け取る
  • URL クエリパラメータ ?title=foo と同じ request.parameter に乗る

このエラーの典型

org.apache.jasper.JasperException: /index.jsp(15,4)
    The jsp:param action must not be used outside of jsp:include,
    jsp:forward or jsp:params.
    at org.apache.jasper.compiler.DefaultErrorHandler.jspError(...)
    at org.apache.jasper.compiler.ErrorDispatcher.dispatch(...)
    ...

他のアクションタグの内側でのみ意味を持ち、それ以外の場所で書くとコンパイル時に弾かれます。

NG パターン

<%-- ❌ NG: 単独で書いている --%>
<%@ page contentType="text/html; charset=UTF-8" %>


      <%-- ← JasperException --%>
    

${param.title}

<%-- ❌ NG: c:if などの内側に直接 --%> <%-- ← JasperException --%> <%-- ❌ NG: jsp:useBean の中 --%> <%-- ← JasperException --%>

正しい使い方: jsp:include の子要素

<%-- ✅ OK: jsp:include の子として --%>
<%-- parent.jsp --%>

    
    


本文

子 JSP 側で受け取る:

<%-- header.jsp --%>
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<%-- EL で受ける(推奨) --%>

lang: ${param.lang}

<%-- スクリプトレットで受ける(非推奨) --%> <% String t = request.getParameter("title"); %>

正しい使い方: jsp:forward の子要素

<%-- ✅ OK: 別 JSP に転送する際にパラメータを付ける --%>

    
        
        
    

使えるアクションタグ一覧

タグ用途jsp:param 可
実行時に別 JSP を取り込み
別 JSP / Servlet に転送
用のパラメータ束
JavaBeans 生成×
Bean プロパティ設定×
<%@ include %> (静的)コンパイル時取り込み×(属性で渡せない)

静的 include との違い

方式タイミングパラメータ
<%@ include file="header.jsp" %>コンパイル時(ソース合体)不可
実行時(別リクエスト的) で渡せる

受け取り側の注意点

<%-- ⚠️ XSS 対策で必ずエスケープ --%>
<%-- ❌ NG: 生で出す --%>

${param.title}

<%-- ✅ OK: c:out で HTML エスケープ --%>

<%-- ✅ OK: fn:escapeXml --%> <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>

${fn:escapeXml(param.title)}

同じ名前のパラメータを複数渡す

<%-- 同名複数 --%>

    
    
    


<%-- list.jsp 側 --%>

    
  • ${t}
  • FAQ

    Q: モダンな書き方は?
    A: 2026 時点では JSP は新規プロジェクトで非推奨。Spring Boot + Thymeleaf / JSF / React + REST が主流。既存システム保守でのみ JSP を扱うのが現実的です。

    Q: jsp:param の value に式を書ける?
    A: value="${user.name}" のように EL が使えます。スクリプトレット <%= %> も可。

    Q: include した子 JSP でセッション属性は共有される?
    A: 同じリクエストなので ${sessionScope.xxx}, ${requestScope.xxx} は共有されます。jsp:param はリクエストパラメータに追加するもの。

    編集
    Post Share
    子ページ

    子ページはありません

    同階層のページ
    1. java.lang.NoSuchMethodError
    2. java.lang.ClassCastException: java.util.Date cannot be cast to java.sql.Date
    3. java.lang.UnsupportedClassVersionError
    4. version less than X.X is not supported.
    5. パッケージ~は存在しません
    6. org.apache.jasper.JasperException: ...The jsp:param action must not be...
    7. java.io.FileNotFoundException: ファイル名 (許可がありません)
    8. java.sql.SQLException: Cannot convert value 'YYYY-MM-DD ...' from column n(YYYY-MM-DD ...) to TIMESTAMP.
    9. 警告: この文字は、エンコーディング[文字コード]にマップできません
    10. java.text.ParseException: Unparseable date
    11. Unsupported major.minor version 52.0
    12. エンティティ" ... "への参照は';'デリミタで終了する必要があります。
    13. java.math.BigDecimal cannot be cast to java.lang.String