학원/JSP

11/23 49-7 [JSP] Action Tag(forward예제)

도원결의 2022. 11. 24. 10:31

뭘 할건지 감을 잡기 위해선 이걸 먼저 봐야함

저기서 모두 다 찍고 확인을 누르면 페이지 이동하는데 이동한 페이지에서 입력한 값들을 가져오게 할 것임

이 과정을 액션태그의 forward방식을 이용하자는 것!

다행히 forward 속성은 page = "이동할페이지명.jsp   이거나  <%=  &>"

이거 하나밖에 없음 !!

 

1. 먼저 

입력을 받을 첫 화면 페이지 코딩

(이건 문서를 걍 받음 여기서 뭘 하진 않아요 그냥 저 위에 그림처럼 띄우고 여기있는 태그를 이용해서 로직 짤 때 이용하는 용임  예를들면 태드속성의 name="" , value="" 요런거 !)

ForwardActionTagExamIndex.jsp

<form action="ForwardActionTagExamProcess.jsp" method="post">
			<div class="form-group">
				<label for="username">아이디</label> <input type="text"
					class="form-control" placeholder="아이디를 입력하세요" id="username" name="username">
			</div>
			<div class="form-group">
				<label for="password">비밀번호</label> <input type="password"
					class="form-control" placeholder="비밀번호를 입력하세요" id="password" name="password">
			</div>
					
			<div>
				
				<label>운동종목</label>
				<div class="form-check-inline">
					<label class="form-check-label"> <input type="checkbox"
						class="form-check-input"  name="sports" value="축구">축구
					</label>
				</div>
				<div class="form-check-inline">
					<label class="form-check-label"> <input type="checkbox"
						class="form-check-input"  name="sports" value="야구">야구
					</label>
				</div>
				<div class="form-check-inline">
					<label class="form-check-label"> <!--반드시 disabled는 속성으로--> <input
						type="checkbox" class="form-check-input" name="sports" value="농구">농구
					</label>
				</div>
			</div>
			<div>
				<label>연령대</label>
				<div class="form-check-inline">
					<label class="form-check-label"> <input type="radio"
						class="form-check-input" name="ages" value="20대">20대
					</label>
				</div>
				<div class="form-check-inline">
					<label class="form-check-label"> <input type="radio"
						class="form-check-input" name="ages" value="30대">30대
					</label>
				</div>
				<div class="form-check-inline">
					<label class="form-check-label"> <!--반드시 disabled는 속성으로--> <input
						type="radio" class="form-check-input" name="ages" value="40대">40대						
					</label>
				</div>
			</div>	
			<button type="submit" class="btn btn-primary">확인</button>
		</form>

 

2.원래는 문제이지만.... 로직 짜는 페이지 

ForwardActionTagExamProcess.jsp

 

1.서버측 유효성 체크를 추가. 체크박스는 2개 이상 선택하도록 하기
2.모든 파라미터를 받아 맵 컬렉션에 저장 다시 리퀘스트 영역에 저장
3.액션태그를 이용해서 result로 이동

<%@page import="java.util.Map"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>    
    <%@ include file="/common/Validate.jsp" %>  <!--- 유효성 체크---->
<!-- ForwardActionTagExamProcess.jsp -->
<%
	//1번 문제 
	//파라미터명이 key 가 된다
	Map<String,String[]> map= request.getParameterMap();
	if(!isValidate(out,map.get("username")[0], "아이디를 입력하세요")) return; 
	if(!isValidate(out,map.get("password")[0], "비밀번호를 입력하세요")) return;
	if(!isValidate(out,map.get("sports"),2)) return;
	if(!isValidate(out,map.get("ages")==null? null : map.get("ages")[0] ,"연령대를 입력하세요")) return;	
	//2번 문제
	request.setAttribute("params",map);	
%>
<jsp:forward page="ForwardActionTagExamResult.jsp"/>

주의할 것 !!

우리가 유효성 체크 할 때마다 사용하는 파일 설정 해논 것을 보면

인자를 (out, String, striing) 이란 말이지?

두 번째 String인자가 문제인데 .... 왜냐면 우린 배열로 받잖아 ! 그래서 map.get("")[0] 이렇게 String 형태로 만드는 것 !!

오메 머리 깨지네..

그리고... 마지막 연령대가 조금 다른 이유

 이거 저번에 request객체 할 때 정리한건데 

[getParameter계열 메소드가 null을 반환하거나 빈 문자열을 반환 하는 경우]
1. parameter를 전달하지 않거나 파라미터명이 틀린 경우 null반환
2.Text박스 계열인 경우 값을 입력 안하고 전송한 경우 빈 문자열(" ") 반환
3.선택 계열인 radio박스나 checkbox등인 경우 미 선택시에는 null반환(왜냐하면 파라미터가 전달이 안되니까!)

 

다른 건 parameter 가 값이 없을 때 빈 문자열로 반환되어서 어쨌든 배열에저장이 되는데

마지막 연령대는 radio 박스이기 때문에 null이 반환되어서 배열로 처리하면 nullpoint 에러가 남 !!

그래서 얘는 null체크로 처리해준다 !

 

 

3. 결과페이지에 결과물들을 뿌려주쟈

ForwardActionTagExamResult.jsp

	<fieldset class=" form-group border p-3">
		<legend class="w-auto px-3">리퀘스트 영역에 저장된 속성 읽기</legend>
<%
	    Map<String,String[]> map =(Map<String,String[]>)request.getAttribute("params");			
%>
		 <ul class="list-unstyled">
		 	<li>아이디 : <%=map.get("username")[0] %></li>
		 	<li>비밀번호 : <%=map.get("password")[0] %></li>	
		 	<li>운동종목 : <%= Arrays.toString(map.get("sports")) %></li>
		 	<li>연령대 : <%= map.get("ages")[0] %></li>	 
		</ul>
		</fieldset>
		
		<fieldset class=" form-group border p-3">
		<legend class="w-auto px-3">파라미터로 전달 된 값 읽기</legend>
		<ul class="list-unstyled">
			 <li>아이디 : <%=request.getParameter("username") %> </li>
			 <li>비밀번호 : <%=request.getParameter("password") %> </li>	
		 	<li>운동종목 : <%=Arrays.toString(request.getParameterValues("sports")) %></li>
		 	<li>연령대 : <%=request.getParameter("ages") %></li>	 
		</ul>		
		</fieldset>

가져와서 뿌리는 연습 좀

많이 하쟈 !!

 

입력창
결과창 쟈쟌! url 은 이전페이지 주소도 확인 !!