학원/JSP

11/29 53-5 [JSP] ForEach 확장!!!

도원결의 2022. 11. 30. 01:02

확장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>

 

이제   자러가자......