11/29 53-5 [JSP] ForEach 확장!!!
확장for문이요 !!
<c:forEach var="어디다 담을 꺼" items="${어디서 꺼내올 꺼}">
출력내용
</c:forEach>
필수속성 : items 및 var
varStatus에 지정한 loopstatusTag객체의 index속성은 항상 0부터 시작
forEach태그 -확장for문형태
또 자바코드랑 한 번 비교하고 들어가셔야죠
배열 출력하기 !!
<% String[ ] colors={"red","green","blue","#9944a5"}; %>
자바코드로 배열 출력
<%for(String color:colors ) { %>
<h4 style="color:<%=color%>">Java Server Page</h4>
<%}%>
el 및 jstl로 배열 출력
<c:set var="colors" value="<%=colors %>"/> =>자바로 선언된 건 el로 바로 출력 못하니까 !!
<c:forEach var="color" items="${colors }">
<h4 style="color:${color}">Java Server Page</h4>
</c:forEach>
[varStatus 속성]
이건 그냥 보면서 이해하는게 더 빠르겠음...
<c:forEach var="color" items="${colors }" varStatus="loop" >
<h5>${loop.count}번 째 반복</h5>
<ul class="list-unstyled">
<li>\${loop.index } :${loop.index } </li>
<li>\${loop.first } :${loop.first } </li>
<li>\${loop.last } :${loop.last } </li>
<li>\${loop.current } :${loop.current } </li>
</ul>
</c:forEach>
역시 확장포문은 리스트와 멥 계열할 때 빛이 나지 !!!!
그렇게 나는 빛을 잃고...
으어어어어어
[리스트 계열 컬렉션]
먼저 데이터 준비 !!
<%
List<MemberDTO> list = Arrays.asList(
new MemberDTO("KIM","1234","김길동","20"),
new MemberDTO("LEE","1234","이길동","25"),
new MemberDTO("PARK","1234","박길동","30"));
%>
역시 한 번 JSTL 거쳐 주고
<c:set var="list" value="<%=list %>" />
일반for문 형태의 forEach 태그로 출력
c:forEach begin="0" end="${list.size()-1}" var="i" >
아이디:${list[i].id},비밀번호:${list[i].pwd},이름:${list[i].name}<br/>
</c:forEach>
확장for문 형태의 forEach 태그로 출력
<c:forEach var="item" items="${list }">
아이디:${item.id},비밀번호:${item.pwd},이름:${item.name}<br/>
</c:forEach>
[맵 계열 컬렉션]
데이터준비!!
<%
Map<String,MemberDTO> map = new HashMap<>();
map.put("first", list.get(0));
map.put("second", list.get(1));
map.put("third", list.get(2));
%>
JSTL 거쳐 주고
<c: set var="map" value="<%=map %>" />
키 값을 알 때 :el변수,키 혹은 el["키"]
<li>아이디 :${map.first.id},비밀먼호:${map.first.pwd},이름:${map.first.name} </li>
<li>아이디 :${map["second"].id},비밀먼호:${map["second"].pwd},이름:${map["second"].name} </li>
<li>아이디 :${map['third']["id"]},비밀먼호:${map['third']["pwd"]},이름:${map['third']["name"]} </li>
키 값을 모를 때
key값 얻기 : var속성에 지정한 \${el변수.key}
value값 얻기 : var 속성에 지정한 \${el변수.value}
<c:forEach items="${map }" var="item">
<li>키:${item.key } 값: 아이디${item.value.id },비번:${item.value.pwd },이름${item.value.name}</li>
</c:forEach>
오늘의 라스트 문제!!!
회원제 게시판(bbs테이블)에 저장된 글을 읽어와서 목록으로 출력(start에서 부터,end 까지)
태그 라이브러리에 목록을 반환하는 메소드를 정의하여 그 메소드를 el에서 호출하도록 하여라
(el과 jstl만 사용)
폼 주세요
네
<table class="table table-dark table-hover text-center">
<thead>
<tr>
<th class="col-1">번호</th>
<th>제목</th>
<th class="col-2">작성자</th>
<th class="col-1">조회수</th>
<th class="col-2">작성일</th>
</tr>
</thead>
<tbody class="table-sm">
<tr>
<td>2</td>
<td class="text-left">제목입니다</td>
<td>가길동</td>
<td>24</td>
<td>2022-11-12</td>
</tr>
</tbody>
</table>
이걸 변경하는겨!!
그리고 또 나의 태그라이브러리를 만드는 겨 !!!
이건 또 어디서 참고해서 가져오냐
BBSDAao 에서 전체 목록 가져오는 메소드 selectList 따오면 되지롱 !
1. MyTagLib에 메소드 만들어 놓기
BBSDao 또 가져올 거니까 인자 ServletContext 타입 필요하고요
Map 다가 몇 개부터 몇 개 까지 뿌릴건지 설정해야 해서 인자를 저렇게 받는다는데
솔직히 잘 모르겠어... 이거도 곧 깨닫게 되겠지....
public static List<BBSDto> selectList(ServletContext context,int start,int end){
BBSDao dao=new BBSDao(context);
List<BBSDto> articles = new Vector<>();
Map map = new HashMap();
map.put("start",start);
map.put("end",end);
articles = dao.selectList(map);
dao.close();
return articles;
}
2. mytag에다가 등록 해 놓자!
<function>
<name>selectList</name>
<function-class>eltag.MyTagLib</function-class>
<function-signature>java.util.List selectList(jakarta.servlet.ServletContext,int,int)</function-signature>
</function>
저 받은 테이블 안을 변경하면 됨 !!
<c:forEach var="item" items="${my:selectList(pageContext.servletContext,1,10)}" >
<tr>
<td>${item.no}</td>
<td class="text-left">${item.title}</td>
<td>${item.name}</td>
<td>${item.hitCount}</td>
<td>${item.postDate}</td>
</tr>
</c:forEach>
이제 자러가자......