EL 연산자에서 []를 사용해야만 하는 경우가 존재한다.
1번째 이유
: 배열이나 list에서 첨자를 표현하기 위해 사용
예시)
[string_array.jsp]
nameArray 배열 선언
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String[] nameArray={"홍길동","임꺽정","전우치","일지매", "장길산"};
request.setAttribute("nameArray", nameArray);
request.getRequestDispatcher("string_array_el.jsp").forward(request, response);
%>
[string_array_el.jsp]
스코프 객체의 속성값이 배열인 경우 배열 요소값을 제공받아 출력하기 위해 첨자를 사용하는데,
EL 표현식에서 . 연산자로 첨자를 사용하여 표현하면 ELException이 발생하기 때문에 EL 표현식에서는 . 연산자를 사용할 수 없다.
<li>${nameArray.0 }</li>
EL 표현식에서는 . 연산자 대신 [] 연산자를 사용하면 된다.
<li>${nameArray["0"] }</li>
첨자는 " " 기호 생략이 가능하다
<li>${nameArray[0]}</li>
EL 표현식에서 배열의 첨자가 범위를 벗어난 경우 EL이 실행되지 않는다. (값 미출력)
<li>${nameArray[5]}</li>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MVC</title>
</head>
<body>
<h1>EL - Array</h1>
<hr>
<ul>
<li>${nameArray[0] }</li>
<li>${nameArray[1] }</li>
<li>${nameArray[2] }</li>
<li>${nameArray[3] }</li>
<li>${nameArray[4] }</li>
<!-- EL 표현식에서 배열의 첨자가 범위를 벗어난 경우 EL 미실행 - 값 미출력 -->
<li>${nameArray[5] }</li>
</ul>
</body>
</html>

예시2)
[car_list.jsp]
<%@page import="java.util.ArrayList"%>
<%@page import="xyz.itwill.el.Car"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
List<Car> carList=new ArrayList<>();
carList.add(new Car("싼타페","하얀색"));
carList.add(new Car("쏘나타","검정색"));
carList.add(new Car("쏘렌토","빨간색"));
carList.add(new Car("페라리","파란색"));
carList.add(new Car("티볼리","초록색"));
request.setAttribute("carList", carList);
request.getRequestDispatcher("car_list_el.jsp").forward(request, response);
%>
[car_list_el.jsp]
EL 표현식에서 List 객체의 요소를 표현하기 위한 첨자로 . 연산자를 사용하면 ELException이 발생된다.
<p>모델명 = ${carList.0.modelName}, 색상 = ${carList.0.carColor}</p>
따라서
<p>모델명 = ${carList[0]["modelName"] }, 색상 = ${carList[0]["carColor"]}</p>
처럼 []로 표현하면 되는데, 이때 modelName과 carColor는 . 으로 가져오면 된다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MVC</title>
</head>
<body>
<h1>EL - List</h1>
<hr>
<p>모델명 = ${carList[0].modelName }, 색상 = ${carList[0].carColor}</p>
<p>모델명 = ${carList[1].modelName }, 색상 = ${carList[1].carColor}</p>
<p>모델명 = ${carList[2].modelName }, 색상 = ${carList[2].carColor}</p>
<p>모델명 = ${carList[3].modelName }, 색상 = ${carList[3].carColor}</p>
<p>모델명 = ${carList[4].modelName }, 색상 = ${carList[4].carColor}</p>
</body>
</html>
2번째 이유
: 스코프 객체의 속성값이 Map 객체인 경우 EL 표현식으로 사용하기 부적절한 문자가 포함된 맵키는 EL 표현식에서 . 연산자 대신 [] 연산자를 이용해야 한다.
예시)
[name_map.jsp]
<%@page import="java.util.Map"%>
<%@page import="java.util.HashMap"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
Map<String, String> nameMap=new HashMap<>();
nameMap.put("first.name", "홍");
nameMap.put("second.name", "길동");
request.setAttribute("nameMap", nameMap);
request.getRequestDispatcher("name_map_el.jsp").forward(request, response);
%>
[name_map_el.jsp]
스코프 객체의 속성값이 Map 객체인 경우 맵키를 사용하여 맵값을 제공받아 출력 처리해야한다.
하지만 EL 표현식으로 사용하기 부적절한 문자가 포함된 맵키인 경우 . 연산자로 제공받아 출력해서는 안된다.
<!-- 출력 불가능-->
<p>이름 = ${nameMap.first.name } ${nameMap.second.name }</p>
스코프 객체의 속성값이 Map 객체인 경우 EL 표현식으로 사용하기 부적절한 문자가 포함된 맵키는 EL 표현식에서 . 연산자 대신 [] 연산자를 이용하여 맵값을 제공받아 출력 처리가 가능하다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MVC</title>
</head>
<body>
<h1>EL - Map</h1>
<hr>
<p>이름 = ${nameMap["first.name"] } ${nameMap["second.name"] }</p>
</body>
</html>

3번째 이유
: 다른 스코프의 속성값을 맵키로 사용하고 싶을 때
예시)
[fruits_map.jsp]
<%@page import="java.util.HashMap"%>
<%@page import="java.util.Map"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
Map<String, String> fruitsMap=new HashMap<>();
fruitsMap.put("one", "복숭아");
fruitsMap.put("two", "참외");
fruitsMap.put("three", "수박");
request.setAttribute("fruitsMap", fruitsMap);
request.setAttribute("choice", "two");
request.getRequestDispatcher("fruits_map_el.jsp").forward(request, response);
%>
[fruits_map_el.jsp]
<p>과일-1 = ${fruitsMap.one}</p>
<p>과일-2 = ${fruitsMap.two}</p>
<p>과일-3 = ${fruitsMap.three}</p>
<hr>
<p>좋아하는 과일 = ${fruitsMap.two }</p>
<p>좋아하는 과일 = ${fruitsMap["two"] }</p>

스코프 객체의 속성값이 Map 객체인 경우 맵키를 사용하여 맵값을 제공받아 출력 처리 하기 때문에, 맵키로 제공되는 맵값이 없는 경우 EL이 실행되지 않는다.
<p>좋아하는 과일 = ${fruitsMap.choice }</p>

스코프 객체의 속성값이 Map 객체인 경우 EL 표현식에서 [] 연산자를 사용하여 다른 스코프 객체의 속성값을 제공받아 맵키로 사용하여 맵값을 제공받아 출력 처리가 가능하다.
<p>좋아하는 과일 = ${fruitsMap[choice]}</p>

'학원 > 복기' 카테고리의 다른 글
[MVC] TLD 파일 / EL 함수 (0) | 2023.07.13 |
---|---|
[MVC] EL 내장객체 (0) | 2023.07.13 |
[MVC] EL(expression Language) (0) | 2023.07.12 |
[MVC] MVC 컨트롤러 (Map 객체 / load-on-startup 엘리먼트 / properties 파일) (0) | 2023.07.12 |
[MVC] Model2 (0) | 2023.07.11 |