06_JSTL(2)

김정욱·2023년 3월 22일
0

Server 복습

목록 보기
10/13
post-thumbnail
✔️ 3. 조건문 - if ( c:if 태그 )
 - 단독 if문 (else 없음)

 * 주의사항 *
 1) test 속성 값 작성은 무조건 EL 구문이어야만 한다
 2) test 속성값 "" 안에는 공백이 존재해서는 안된다

<%-- scriptlet 작성법 --%>
<% if(1 == 1){ %>
  출력됩니다.
<% } %>

<%-- JSTL 작성법 --%>
<c:if test="${1 == 1}">
	JSTL 작성법
</c:if>

<%-- session 범위에 세팅된 test의 값이 "session"인 경우 --%>
<%--
  - 문자열 비교시 (==) 비교연산자 사용 가능
  - 문자열임을 표기하는 리터럴 == ''(홑따옴표) / "" (쌍따옴표)
--%>

<c:if test='${ sessionScope.test == "session"}'>
	<h4>sessionScope.test == 'session'</h4>
</c:if>

<c:if test='${ sessionScope.test != "session"}'>
	<h4>sessionScope.test != 'session'</h4>
</c:if>  

✔️ 4. 조건문 - if ~ else if ~ else ( c:choose, c:when, c:otherwise )
 - c:choose : when, otherwise를 감싸는 태그
			 (현재 태그 내부에 if ~ else if ~ else를 작성하겠다)
 - c:when : if/else if를 나타내는 태그
			속성은 test 밖에 없음(조건 작성 속성)
 - c:otherwise : else를 나타내는 태그
				 아무런 속성도 존재하지 않음

<c:set var="temp2" value="100" />

<c:choose>

  <c:when test="${temp2 > 100}">
    100보다 크다
  </c:when>

  <c:when test="${temp2 < 100}">
    100보다 작다
  </c:when>

  <c:otherwise>
    100과 같다
  </c:otherwise>

</c:choose>

✔️ 5. 반복문 ( c:forEach 태그 )
 - 일반 for + 추가 기능
 - 속성
  1) var	: 현재 반복 횟수에 해당하는 변수 (int i)
  2) begin  : 반복 시 var 시작 값
  3) end	: 반복이 종료될 var 값
  4) step	: 반복 시 마다 var의 증가 값 (기본값 1)

  5) items	: 반복 접근한 객체(배열, 컬렉션 객체)

  6) varStatus : 현재 반복 상태와 관련된 정보를 제공하는 변수 선언

	varStatus="변수명"
	-> c:forEach 구문 내에서 "변수명"을 통해 원하는 값을 얻을 수 있다

	* varStatus에서 제공되는 값
	- current : 현재 반복 횟수(현재 var 값)
				또는 현재 반복 접근 중인 객체(컬렉션/배열 요소)4
	- index : 현재 인덱스 값 반환 (0부터 시작)
	- count : 현재 몇 바퀴인지 반복 횟수 반환 (1부터 시작)
	- first : 첫 번째 반복이면 true, 아니면 false
	- last : 마지막 반복이면 true, 아니면 false
✔️ 일반 for문 형식으로 사용
<c:forEach var="i" begin="1" end="6" step="1">
  <h${i}> 현재 i 값 : ${i} <h${i}>
</c:forEach>    

✔️ 일반 for문 + varStatus
<table border="1">
  <c:forEach var="n" begin="1" end="10" varStatus="vs">
    <c:choose>
      <%-- choose 내부에는 무조건 JSP 주석만 작성 --%>
      <%-- 첫번째 반복일 경우 --%>
      <c:when test="${vs.first}">
        <tr>
          <th class="first"> ${n} </th>
          <th class="first"> ${n}번 게시글 입니다 </th>
        </tr>
      </c:when>
       
 	  <c:when test="${vs.last}">
        <tr>
          <th class="last"> ${n} </th>
          <th class="last"> ${n}번 게시글 입니다 </th>
        </tr>
      </c:when>

      <c:otherwise>
        <tr>
          <th> ${n} </th>
          <th> ${n}번 게시글 입니다 </th>
        </tr>
      <c:otherwise>
  </c:choose>          
</table>

✔️ 향상된 for문 형식으로 사용
<form action="forEach" method="get">

  <input type="checkbox" name="lang" value="java"> java <br>
  <input type="checkbox" name="lang" value="sql"> sql <br>
  <input type="checkbox" name="lang" value="jdbc"> jdbc <br>
  <input type="checkbox" name="lang" value="html"> html <br>
  <input type="checkbox" name="lang" value="css"> css <br>
  <input type="checkbox" name="lang" value="javascript"> javascript <br>
  <input type="checkbox" name="lang" value="jQuery"> jQuery <br>
  <input type="checkbox" name="lang" value="servlet"> servlet <br>
  <input type="checkbox" name="lang" value="jsp"> jsp <br>

  <button>제출</button>
</form>  

[servlet]

@WebServlet("/forEach")
public class ForEachServlet extends HttpServlet {
  @Override
  protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
  throws ServletException, IOException {
		
	List<Person> pList = new ArrayList<>();
		
	pList.add(new Person("홍길동", 25, "서울시 중구"));
	pList.add(new Person("고길동", 26, "서울시 강북구"));
	pList.add(new Person("박길동", 45, "서울시 성동구"));
	pList.add(new Person("강길동", 17, "서울시 서대문구"));
	pList.add(new Person("김길동", 35, "서울시 성북구"));

	req.setAttribute("pList", pList);
		
	// 요청위임
	RequestDispatcher dispatcher = 
    req.getRequestDispatcher("WEB-INF/views/forEach.jsp");
		
	dispatcher.forward(req, resp);
  }
}
[JSP]

param.lang : 파라미터 중 lang의 값을 얻어와 출력
			 단, lang 이름의 파라미터가 여러개면 첫번째만 얻어온다

paramValues.lang : lang이라는 이름의 파라미터를 모두 얻어와 배열로 반환

${param.lang} / ${paramValues.lang[0]} / ${paramValues.lang[1]}

<c:choose>
  <c:when test="${empty paramValues.lang}">
    <h1 style="color:orangered"> 체크된 값이 없습니다 </h1>
  </c:when>

  <c:otherwise>
    <ul>
      <c:forEach var="chk" itesm="${paramValue.lang}" varStatus="vs">
        <li>
          index : ${vs.index} <br>
          count : ${vs.count} <br>
          current : ${vs.current} <br>
          first : ${vs.first} <br>
          last : ${vs.last}
        </li>
      </c:forEach>
    </ul>       
  </c:otherwise> 
</c:choose>

✔️ 객체 배열 / 컬렉션 반복 접근하기

[JSP]

<table>
  <c:forEach var="person" items="${requestScope.pList}"
  	<tr>
      <th>${person.name}</th>
      <td>#{person.age}</td>
      <td>#{person.address}</td>
    </tr>
  </c:forEach>
</table>

profile
절박한 마음을 갖고 하루를 보내자!!

0개의 댓글