11/23 49-7 [JSP] Action Tag(forward예제)
뭘 할건지 감을 잡기 위해선 이걸 먼저 봐야함
저기서 모두 다 찍고 확인을 누르면 페이지 이동하는데 이동한 페이지에서 입력한 값들을 가져오게 할 것임
이 과정을 액션태그의 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>
가져와서 뿌리는 연습 좀
많이 하쟈 !!