본문 바로가기

Java

<jsp:include> / <jsp:param> 사용법 - Expecting "jsp:param" standard action with "name" and "value" attributes with root cause

일단 에러 메세지부터

 

ERROR 30796 --- [nio-9000-exec-3] [dispatcherServlet]
Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [/WEB-INF/jsp/view/mypage.jsp (line: [16], column: [16]) Expecting "jsp:param" standard action with "name" and "value" attributes] with root cause
org.apache.jasper.JasperException: /WEB-INF/jsp/view/mypage.jsp (line: [16], column: [16])
Expecting "jsp:param" standard action with "name" and "value" attributes] with root cause

 

 

- 문제 -

메세지를 읽어 보니 대충 jsp:param 을 넣어야 한다는 말인 거 같았다.

그런데 왜 이런 에러가 나는지 몰랐다.
에러가 난 부분을 찾아가 보니 코드는 아래와 같았다.

 

<!-- 에러가 나는 코드 -->
<jsp:include page="mypage.jsp">
</jsp:include>

 


딱히 문제될 게 없어 보이고 <jsp:include> 태그는 다른 페이지에서도 쓰던 걸 그대로 복사해서 붙여넣은 코드이기 때문에 오타도 없을 것이었다.
다른 페이지에서는 잘 되고 있던 코드인데 여기서는 되지 않았다.
굳이 다른 점을 찾자면 <jsp:include> 태그를 여는 태그와 닫는 태그 사이에 줄바꿈이 되어 있는 정도...?
설마 그거겠어...?
줄바꿈을 지우고 한 줄로 이어서 쓰니까 에러가 사라졌다.

 

<!-- 잘 작동하는 코드 -->
<jsp:include page="mypage.jsp"></jsp:include>

 

-  <jsp:include> 쓸 때 <jsp:param> 가 없다면 줄바꿈 금지 -

<jsp:include> 를 쓸 때는 여는 태그와 닫는 태그 사이에 줄바꿈이 있어서는 안 되나 보다.
<jsp:param> 태그를 사이에 넣어줄 때만 줄바꿈을 쓰나 보다.
그래서 <jsp:param> 를 넣어달라는 에러 메세지가 떴었나 보다.
혹시나 해서 줄바꿈을 하고 사이에 <jsp:param> 태그를 넣어봤더니 잘 된다.

 

<!-- 잘 작동하는 코드 -->
<jsp:include page="mypage.jsp">
    <jsp:param name="headerTitle" value="헤더 제목입니다" />
</jsp:include>

 

 

- 해결 -

<jsp:include> 를 쓸 때는 여는 태그와 닫는 태그 사이에 줄바꿈을 하지 말자.
줄바꿈을 넣으려면 <jsp:param> 태그를 넣어줘야 함.

 

 

- <jsp:param> 으로 넣어준 파라미터 꺼내서 쓰기 -

<jsp:param> 으로 넣어준 파라미터를 다른 페이지에서 받아서 쓸 때는 아래와 같다.

일단 request 로부터 parameter 를 꺼내오고, 다시 pageContext 에 넣어줘야 한다.

그러면 model 에서 꺼내서 쓰는 것처럼 ${} 기호로 꺼내서 쓸 수 있다.

<% String paramHeaderTitle = request.getParameter("headerTitle"); %>
<% pageContext.setAttribute("title", paramHeaderTitle); %>

<header class="header-container">
    <div class="header">
        <div class="header-left">
            <a href="javascript:void(0); return false" onclick="onClickBackBtn(this.href); return false;"></a>
        </div>
        <h1>${title}</h1>
        <div class="header-right">
            <button type="button" onclick="onClickCloseBtn();">닫기</button>
        </div>
    </div>
</header>

 

- 241224

반응형