note

EL , JSTL 코어태그 (c:forEach)(c:choose) 본문

JSP/JSTL

EL , JSTL 코어태그 (c:forEach)(c:choose)

투한 2012. 2. 14. 10:46


코어태그 라이브러리













<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="kame.chap16.Member" %>
<%@ page import="java.util.HashMap" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
	Member member = new Member();
	HashMap<String,String>pref = new HashMap<String,String>();
	
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>set 태그</title>
</head>
<body>
<!-- scope영역을 지정해주지 않았으므로 기본적으로 pageContext에 저장 -->
<!-- target el로 값을 읽어옴 property에 value를 집어넣음 -->
<c:set var="member" value="<%=member %>"/>
<c:set target="${member}" property="name" value="최범균" />

<!-- #은 EL에서 사용하는 기호 (많이 사용하지 않음)(비추천) -->
<!-- 처음에 속성을 사용하지 않고 명시만 할 수 있음 (데이터는 없고 위치만 잡는) -->
<c:set var="pref" value="<%=pref %>" />
<c:set var="favoriateColor" value="#{pref.color}" />

회원 이름 : ${member.name},
좋아하는 색 : ${favoriateColor}
<br/>
<c:set target="${pref}" property="color" value="red" />
설정 이후 좋아하는 색 : ${favoriateColor}
</body>
</html>

5번 라인
해당 클래스가 식별자를 통해  불려지도록함


  • <c:set />
  •  
  -> setAttribute(속성명,속성값) 

${속성명} -> getAttribute(속성명)

<c:remove/> 
 -> removeAttribute(속성명)







<c:if>태그
















<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>if 태그</title>
</head>
<body>
<c:if test="true">
무조건 수행<br/>
</c:if>
<c:if test="${param.name=='bk'}">
name 파라미터의 값이${param.name}입니다.<br/>
</c:if>
<c:if test="${18<=param.age}">
당신의 나이는 18세 이상입니다.
</c:if>
<%-- 다중 조건 체크는 못함(else) --%>
</body>
</html>



<c:choose>
















한번의 문장 만 실행하고 빠져나가기 때문에 착각에 빠지기 쉽다





<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>choose 태그</title>
</head>
<body>
<ul>
<c:choose>
	<c:when test="${param.name=='bk'}">
		<li>당신의 이름은 ${param.name}입니다.</li>
	</c:when>
	<c:when test="${param.age>=20}">
		<li>당신은 20세 이상입니다.</li>
	</c:when>
	<c:otherwise>
		<li>당신은 'bk'가 아니고 20세 이상이 아닙니다.</li>
	</c:otherwise>
</c:choose>
</ul>
</body>
</html>





<c:forEach>




VarStatus 속성

index : 루프 실행에서 현재 인덱스
count : 루프 실행 횟수
begin : begin 속성값
end : end속성값 
step : step 속성값
first : 현재 실행이 첫 번째 실행인 경우 true
last : 현재 실행이 루프의 마지막 실행인 경우 true
current : 컬렉션 중 현재 루프에서 사용할 객체 


 


<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.util.HashMap" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>forEach 태그</title>
</head>
<body>
<%-- 대입 연산자가 없기 떄문에 sum에 계속 덮어씌워서 마지막 값이 출력됨 --%>
<h4>1부터 100까지 홀수의 합</h4>
<c:set var="sum" value="0" />
<c:forEach var="i" begin="1" end="100" step="2" >
<c:set var="sum" value="${sum+i}" />
</c:forEach>
결과 = ${sum}


<h4>구구단 : 4단</h4>
<ul>
<c:forEach var="i" begin="1" end="9">
<li>4 * ${i} = ${4 * i}</li>
</c:forEach>
</ul>

<%-- varStatus :루프 상태를 저장할 EL 변수 이름 --%>
<h4>int형 배열</h4>
<c:set var="intArray" value="<%=new int[]{1,2,3,4,5} %>" />
<c:forEach var="i" items="${intArray}" begin="2" end="4" varStatus="status">
	${status.index}-${status.count}-[${i}]<br/>
</c:forEach>

<h4>Map</h4>
<%
	HashMap<String,Object> mapData = new HashMap<String,Object>();
	
	mapData.put("name","최범균");
	mapData.put("today",new java.util.Date());
%>

<c:set var="map" value="<%=mapData %>" />
<c:forEach var="i" items="${map}">
	${i.key} = ${i.value}<br/>
</c:forEach>
</body>
</html>


HashMap

<%

HashMap map = new HashMap();

%>

스크립트 릿 안에 있는 객체는 EL과 JSTL에서 사용할 수 없다 
그래서 page,request,session,application 에 넣어야된다
<c:set var="map" value="<%=map%>" /> 







<c:forTokens>






<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>forTokens 태그</title>
</head>
<body>
콤마와 점을 구분자로 사용:<br>
<c:forTokens var="token" items="빨강색,주황색.노란색.초록색,파랑색,남색.보라색,흰색" delims=",.">
${token } <br/>
</c:forTokens>

</body>
</html>





<c:out>




실행시 오류남 path를 걸어줘야 됨


같은 경로에 있는 파일 이름을 입력






<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.io.IOException,java.io.FileReader" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
</head>
<body>
<%
	FileReader reader = null;
	try{
		String path=request.getParameter("path");
		reader = new FileReader(getServletContext().getRealPath(path));
%>
<pre>
소스 코드 = <%=path%>
<c:out value="<%=reader %>" escapeXml="true" />
</pre>
<%}catch(IOException ex){ %>
에러 : <%=ex.getMessage() %>
<%
}finally{
	if(reader!=null)
		try{
			reader.close();
		}catch(IOException ex){}
}
%>
</body>
</html>




<c:catch>











 
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>catch 태그</title>
</head>
<body>
<c:catch var="ex">
name 파라미터의 값 = <%=request.getParameter("name") %><br/>
<%if(request.getParameter("name").equals("test")){ %>
${param.name}은 test 입니다.
<%} %>
</c:catch>
<p>
<c:if test="${ex != null }">
예외가 발생하였습니다:<br/>
${ex}
</c:if>
</body>
</html>