JSTL과 EL : EL태그로 동일한 name의 파라미터를 EL태그로 쉽게 가져오기

EL태그로 페이지 이동시 정보가져오기

  • 동일한 name의 파라미터인 경우 어떻게 정보를 가져올 수 있을까?
  • 순서 :
    1. paramTest.html생성.
    2. 동일한 name을 가진 파라미터를 만든다.
    3. 그다음 paramTest.jsp생성.
    4. 동일한 name의 파라미터를 어떻게 가져올수있을까?
      • 첫번째 방법 : String array와 request.getParameterValues()사용
      • 두번째 방법 : EL태그사용




공통코드 : paramTest.html 생성

1
2
3
4
5
6
7
8
9
10
11
12
<fieldset>
<form action="paramTest.jsp" method="get">
ID : <input type="text" name="id"><br>
PW : <input type="password" name="pw"><br>
MSG1 : <input type="text" name="msg"><br>
MSG2 : <input type="text" name="msg"><br>
<input type="checkbox" name="hobby" value="수영">수영
<input type="checkbox" name="hobby" value="등산">등산
<input type="checkbox" name="hobby" value="댄스">댄스
<input type="submit" value="전송하기">
</form>
</fieldset>




첫번째방법 : String array와 request.getParameterValues()사용

paramTest.jsp 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
<%//1.한글처리
request.setCharacterEncoding("UTF-8");

//2.각각의 정보를 저장 후 출력 => 동일한 name의 파라미터를 인식하지 못하고 제일 첫번째의 파라미터값만 가져옴
String id = request.getParameter("id");
String pw = request.getParameter("pw");
String msg1 = request.getParameter("msg");
String msg2 = request.getParameter("msg");
%>
<table border="1">
<tr>
<td>아이디 </td>
<td><%=id %></td>
</tr>
<tr>
<td>비번 </td>
<td><%=pw %></td>
</tr>
<tr>
<td>메세지1 </td>
<td><%=msg1%></td>
</tr>
<tr>
<td>메세지2 </td>
<td><%=msg2%></td> //2-1.메세지1과 동일한 파라미터값이 출력된다->어떻게하면 메세지2를출력할수있을까?
</tr>
</table>

<hr>
<%
//3.동일한 name의 데이터를 어떻게 가져올수있을까? =>String array와 request.getParameterValues()
String[] str = request.getParameterValues("msg");
%>
<%=str[0] %>
<%=str[1] %>
<hr>
<h2>체크박스1 : 일반출력</h2>
<%

//4.체크박스 => request.getParameterValues()
String[] optStr = request.getParameterValues("hobby");
//체크박스 3개중 2개만 틱한 상태에서 페이지를 넘기면 nullpoint예외라는 심각한 문제가 발생한다.
%>
<%=optStr[0] %>
<%=optStr[1] %>
<%=optStr[2] %>

<%
//4-1.첫번째방법 : 배열의 길이만큼만 출력
//3개 모두 틱하지않더라도 출력이 잘된다.
//하지만 하나도 틱하지않은 상태인 경우 또 nullpoint에러가 발생한다 => 해결if문
for(int i=0; i<optStr.length; i++){
%>
<%=optStr[i] %>
<%
}

//그래서 if문이 필수 => 챙겨야할것이 많으므로 두번째방법인 el태그 추천
if(optStr != null){
for(int i=0;i<optStr.length;i++){
%>
<%=optStr[i] %>
<%
}
}
%>




두번째방법 : EL태그 사용

taglib 추가

1
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

paramTest.jsp 생성

- 위의  `paramTest.html`을 바탕으로 아래 코드 구현.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<h2>체크박스1 : EL 표현식 사용 출력</h2>
<!--
EL표현식은 nullpoint예외가 발생되면 화면은 빈화면으로 출력한다
param 객체 : request.getParameter("이름")
paramValues 객체 : request.getParameterValues("이름")
-->

<!-- param 객체 -->
아이디 : ${ param.id }<br>
비밀번호 : ${ param.pw }<br>
<!-- paramValues 객체 -->
옵션1 : ${ paramValues.hobby[0] }<br>
옵션2 : ${ paramValues.hobby[1] }<br>
옵션3 : ${ paramValues.hobby[3] }<br>

<hr>
<!-- 5. foreach -->
<c:forEach var="tmp" items="${paramValues.hobby }">
${tmp }<br>
</c:forEach>

Comments