본문 바로가기

학원/복기

[MVC] EL 연산자에서의 [] 사용

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