11/29 53-1 [JSP] JSTL (SetTag)
원래 개념 싹 정리하고 들어가려고 했는데
오늘 너무 걍 싹다 멘붕
그럴시간도 없다 지금 블로그 예쁘게 정리할 때가 아님!!! 배운거 걍 열심히 이것저것 시도해 보는게 지금은 중요한거 같아서 배운거 위주로 그냥 적어놓자 !! 시간이 너어어어무 없어!
큰 틀만 대충 잡고 넘어자가
JSTL의 태그에는 5가지 태그를 지원한다.
core - 이거 오늘 배움
xml -이건 안배울거
국제화 - 곧 배울거
데이터베이스 - 얘도 안배울거
함수 -곧 배울거
core태그는 taglib지시어를 사용하여 접근한다.
%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 이렇게 쓰는 것!
core태그의 주요기능(종류).. 많음
표현언어: catch,out,remove,set
흐름제어 : chooes,when,otherwise,forEach,forToken,if
url관리 : impor,param,redirect,url
이걸 하나씩 정리할 것임 !!
바로 고
수업 땐 스크립트 요소로 비교하면서 했는데 여기선 다 뺄거
지금은 el이 중요해
[SetTag]
SetTagIndex.jsp
1.set태그로 el에서 사용할 변수 설정
var속성: 문자열만 가능 -- var 에 설정 한 이름으로 출력하는거다 !! ${var에 설정한이름}
value속성 : 값,표현식 el식 모두 가능하다
scope속성 : "page","request" ,"session","application" 중 하나(기본은 페이지)
<h3>set태그로 EL에서 사용 할 변수 설정</h3>
<ul class="list-unstyled">
<li>value속성에 직접 값 설정 : <c:set var="directvar" value="100"/> </li>
<!-- 위는 아래 자바코드와 같음 -->
<% pageContext.setAttribute("directvar","100"); %>
<li>value속성에 EL로 값 설정 : <c:set var="elvar" value="${directvar} "/> </li>
<li>value속성에 표현식으로 값 설정: <c:set var="expvar" value="<%=new Date(new java.util.Date().getTime()) %>"/> </li>
<li>시작태그와 종료태그 사이에 값 설정(값이 길 때 ) : <c:set var="betweenvar"><h4>시작태그와 종료태그</h4>사이에 값을 설정 합니다. </c:set> </li>
</ul>
2. set태그로 설정한 값 출력하기(pageScope가 디폴트라 생략가능한건 저번시간에 배운거!)
<ul class="list-unstyled">
<li>directvar : ${pageScope.directvar} </li>
<li>elvar : ${elvar} </li>
<li>expvar : ${expvar} </li>
<li>betweenvar : ${betweenvar} </li>
</ul>
3.set태그로 각 영역에 저장-value에 직접 값 설정
(영역에 저장 할 때 지정하지 않으면 기본 page영역임! 특정 영역에 저장 하고 싶을 때는 반드시 scope 설정 필요!)
<c:set var="pagevar" value="페이지영역"/>
<c:set var="requestvar" value="리퀘스트영역" scope="request"/>
<c:set var="sessionvar" value="세션영역" scope="session"/>
<c:set var="applicationvar" value="어플리케이션영역" scope="application"/>
4.el로 값 출력하기
<li>pagevar : ${pagevar} </li>
<li>requestvar : ${requestvar} </li>
<li>sessionvar : ${sessionvar} </li>
<li>applicationvar : ${applicationvar} </li>
5.set태그로 자바빈 객체 저장(기본생성자 사용)
<c:set scope="request" var="defaultMember" value="<%=new MemberDTO() %>"/>
이번엔 영역을 지정 했지? var명으로 출력하면 될 거고 MemberDTO 타입이니까그안의 속성을 또 꺼내올 수 있겠지
6.el로 값 출력
<ul class="list-unstyled">
<li>실험: ${defaultMember}</li>
<li>이름 :${defaultMember.name }</li>
<li>아이디 : ${defaultMember.id }</li>
<li>비밀번호 : ${defaultMember.pwd }</li>
</ul>
6-1 인자생성자를 넣고 출력 (자바 태그는 꼭 ' ' 로 감싸야 한다 !!!!)
<c:set scope="request" var="argsMember" value='<%=new MemberDTO("KIM","1234","김길동","20") %>'/>
<ul class="list-unstyled">
<li>이름 :${argsMember.name }</li>
<li>아이디 : ${argsMember.id }</li>
<li>비밀번호 : ${argsMember.pwd }</li>
</ul>
[target/property 속성]
set태그의 target속성과 property속성도 있음!
그건 자바빈 객체나 컬렉션계열 객체 "설정"할 때 사용할 수 있는 속성
set!!!!
target : 반.드.시. el식이나 표현식만 가능 !
property : 모두 가능 !! 여기에 key역할 하는 걸 넣으면 됨(ex.자바의 속성명, map의 키값..) ! 왜냐면 거의 var대신 쓰거든 !
그래서 중요한게!!! scope 속성을 쓰려면 반드시 var속성을 지정한 태그에서만 설정이 가능하다!!
또 그래서 target,property 속성 사용하면 var속성 지정을 못해!
이거 왜 쓰는지 이유를 알겟어!!
원래 var에는 문자열만 올 수 있는데
${ } 이걸 var에다가 넣고 싶은거지!!
그래서 대체할 수 있는 속성을 만든게야!!!! 오오오오오오!!!
7.target 및 property속성으로 값 설정 후 EL로 출력
<c:set target="${defaultMember}" property="id" value="PARK" />
<c:set target="${defaultMember}" property="pwd" value="1234" />
<c:set target="${defaultMember}" property="name" value="박길동" />
<li>이름 :${defaultMember.name }</li>
<li>아이디 : ${defaultMember.id }</li>
<li>비밀번호 : ${defaultMember.pwd }</li>
출력 할 땐 그냥 var쓰는거랑 저어어언혀 다른게 없네
--리스트계열 컬렉션---
<%
리스트계열 컬렉션 - 자바빈(MemberDTO) 저장
List<MemberDTO> list = Arrays.asList(
(MemberDTO)request.getAttribute("defaultMember"),
(MemberDTO)request.getAttribute("argsMember"));
%>
target 속성으로 값을 저장 해 보자!
<c:set scope="request" value="<%=list %>" var="list"/>
<c:set target="${list[0]}" value="한소인" property="name"/>
<c:set target="${list[0]}" value="코스모" property="id"/>
<c:set target="${list[0]}" value="1234" property="pwd"/>
아니 이게 너무 헷깔렸어서
처음에
defaultMember 박길동 정보 들어가 있고 그다음에 argsMember에 김길동 정보 입력함
그리고나서 list계열에 박길동,김길동 순서로 저장
그리고 list[0]번방을 새롭게 셋팅함
그래서 list를 출력 해보면
<li>실험 : ${list}</li>
<li>이름 : ${defaultMember.name }</li>
<li>아이디 : ${defaultMember.id }</li>
<li>비밀번호 : ${defaultMember.pwd }</li>
---맵 계열 컬렉션 ---
<%
Map<String,MemberDTO> map = new HashMap<>();
map.put("default",list.get(0)); ==>default는 el의 예약어라서 map["default"] 방식으로 접근한다!!
map.put("args",list.get(1));
%>
0방이였던 한소인을 default라는 키값에 넣고
1번방이였떤 김길동을 args라는 키값에 넣음
그리고나서 default를 새롭게 셋팅하면
한소인이 새롭게 바뀌겠지!
<c:set var="map" value="<%=map %>" scope="request"/>
<!-- default는 el의 예약어라서 map["default"] 방식으로 접근한다!! -->
<c:set target="${map['default']}" property="name" value="한소인2"/>
<c:set target="${map['default']}" property="id" value="KOSMO2"/>
<c:set target="${map['default']}" property="pwd" value="9999"/>
셋팅
<li>실험 : ${map }</li>
<li>이름 : ${map["default"].name}</li>
<li>아이디 : ${map["default"].id }</li>
<li>비밀번호 : ${map["default"].pwd }</li>
출력
페이지를 포워딩 시켜서 두번째 페이지에서 출력 해 보자!!
첫 번째 페이지 마지막에
<jsp:forward page="SetTagResult.jsp" >
<jsp:param name="subject" value="android"/>
</jsp:forward>
추가해서 포워딩 고
1.xxxvar계열
<li>pagevar : ${pagevar} </li>
<li>requestvar : ${requestvar}</li>
<li>sessionvar : ${sessionvar} </li>
<li>applicationvar : ${applicationvar} </li>
2.MemberDTO(자바빈)계열(argsMember)출력
<li>이름: ${argsMember.name }</li>
<li>아이디:${argsMember.id }</li>
<li>비번:${argsMember.pwd } </li>
<li>나이:${argsMember.age } </li>
<li>argsMember:${argsMember} </li>
3.리스트 계열 컬렉션(인덱스 1인 객체) 출력
<li>이름:${list[1].name } </li>
<li>아이디:${list[1].id } </li>
<li>비번:${list[1].pwd } </li>
<li>나이:${list[1].age } </li>
4.맵 계열 컬렉션(키값이 'args'인 객체) 출력
args는 예약어 아니니까 .을쓰건 [ ] 를 쓰건 내 맴
<li>이름:${map.args.name} </li>
<li>아이디: ${map["args"].id}</li>
<li>비번:${map['args'].pwd}</li>
5.파라미터 출력
미쳣어... param. 꼭 반드시!!!!!! 까먹지 말라고 !!!!!!
\${param.subject} : ${param.subject}