1. Spring에서의 리소스 처리 방법에 대하여 설명하시오.
1-1. Spring의 resource
: 이미지나 css, js 문서와 같은 정적 리소스 파일들을 담는 공간
1-2. 정적 리소스 취급 방법
2. 기존 Board 프로젝트 내 list에서 추가로 페이징을 구현하시오
: 미구현(3번 EMP List 구현으로 인한 시간 초과)
3. Scott DB의 EMP/DEPT 테이블 정보들을 불러온 뒤 직원 정보들을 새로 작성하시오.
3-1. 소스코드
EMP List Project
3-2. 구현사항
- 직원 리스트 페이지(list) 구현
- 직원 정보 작성 페이지(write_view) 구현
- 직원 정보 작성 반영(write) 구현
- 클라이언트에서 유효성 검사(write_view 내 script) 구현
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>EMP - Write</title> <script src="//code.jquery.com/jquery-1.11.3.min.js"></script> <script src="//code.jquery.com/jquery-migrate-1.2.1.min.js"></script> <script type="text/javascript"> $(document).ready(function() { $("#sbmBtn").click(function() { if($("#empno").val() == "") { // 입력정보만 검사 alert("사원번호를 입력하세요."); event.preventDefault(); } else if ($("#ename").val() == "") { alert("사원이름을 입력하세요."); event.preventDefault(); } else if ($("#hiredate").val() == "") { alert("입사일을 입력하세요."); event.preventDefault(); } else if ($("#sal").val() == "") { alert("급여를 입력하세요."); event.preventDefault(); } else { alert("입력이 완료 되었습니다."); $("#loginForm").submit(); } }); $("#resBtn").click(function() { alert("입력 정보가 초기화 되었습니다."); $("#loginForm")[0].reset(); }); }); </script> </head> <body> <h1>사원 정보 입력</h1> <hr> <form id="loginForm" action="write" method="post"> 사원번호 <input id="empno" type="number" name="empno"><br> 사원이름 <input id="ename" type="text" name="ename"><br> 직급 <select name="job"> <c:forEach var="job" items="${jobList}"> <option value="${job.job}">${job.job}</option> </c:forEach> </select><br> 상사 <select name="mgr"> <c:forEach var="mgr" items="${mgrList}"> <option value="${mgr.empno}">(${mgr.empno}) ${mgr.ename}</option> </c:forEach> </select><br> 입사일 <input id="hiredate" type="date" name="hiredate"><br> 급여 <input id="sal" type="number" name="sal" placeholder="4200"><br> 커미션(선택) <input type="number" name="comm" placeholder="500"><br> 부서 <select name="deptno"> <c:forEach var="dept" items="${deptList}"> <option value="${dept.deptno}">(${dept.deptno}) ${dept.dname}</option> </c:forEach> </select><br> <input id="sbmBtn" type="submit" value="입력하기"> <input id="resBtn" type="reset" value="입력초기화"> <input type="button" value="돌아가기" onclick="location.href='list'"> </form> </body> </html>
- 서버에서 유효성 검사(validator) 구현
package edu.bit.ex.emp.controller; import java.util.List; import javax.validation.Valid; import org.springframework.stereotype.Controller; import org.springframework.transaction.annotation.Transactional; import org.springframework.ui.Model; import org.springframework.validation.BindingResult; import org.springframework.validation.FieldError; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import edu.bit.ex.emp.service.EmpService; import edu.bit.ex.emp.validator.EmpValidator; import edu.bit.ex.emp.vo.EmpVO; import lombok.AllArgsConstructor; import lombok.extern.log4j.Log4j; @Log4j @AllArgsConstructor @Controller public class EmpController { private EmpService empService; /* 중략 */ // 직원 정보 작성 @PostMapping("/emp/write") public String write(@Valid EmpVO empVO, BindingResult result) { log.info("write()"); String page = "redirect:list"; EmpValidator validator = new EmpValidator(); validator.validate(empVO, result); if (result.hasErrors()) { page = "reditect:write_view"; List<FieldError> list = result.getFieldErrors(); if (null != result.getFieldErrors()) { for (FieldError fe : result.getFieldErrors()) { log.info("Field: " + fe.getField()); log.info("Code: " + fe.getCode()); log.info("ObjectName: " + fe.getObjectName()); log.info("RejectedValue: " + fe.getRejectedValue()); log.info("DefaultMessage: " + fe.getDefaultMessage()); // log.info("에러메시지: " + fe.getCode()); } } } return page; } }
package edu.bit.ex.emp.validator; import org.springframework.validation.Errors; import org.springframework.validation.ValidationUtils; import org.springframework.validation.Validator; import edu.bit.ex.emp.vo.EmpVO; import lombok.extern.log4j.Log4j; @Log4j public class EmpValidator implements Validator { @Override public boolean supports(Class<?> clazz) { // 검증할 EmpVO의 타입 정보를 리턴 return EmpVO.class.isAssignableFrom(clazz); } @Override public void validate(Object obj, Errors errors) { log.info("validate()"); EmpVO empVO = (EmpVO) obj; int empno = empVO.getEmpno(); if (empno == 0) { log.info("empno is 0"); errors.rejectValue("empno", "trouble", "wrong empno"); } ValidationUtils.rejectIfEmptyOrWhitespace(errors, "empno", "trouble"); } }
3-3. 미구현사항
- 클라이언트에서 직원번호(empno) 중복성 체크 미구현boardmapper.xml에서 select count() 쿼리문을 추가한 후 write_view내 script에서 el문법을 통해 대조하면 해결될 것으로 보임
- 서버에서 직원번호(empno) 중복성 체크 미구현boardmapper.xml에서 select count() 쿼리문을 추가한 후 validator 객체에서 해당 VO객체의 getEmpno() 메소드를 가져와 대조하면 해결될 것으로 보임
'WebDev > 본과정' 카테고리의 다른 글
SQL의 더미 데이터 처리와 JUnit을 통한 테스트 (0) | 2021.05.16 |
---|---|
오라클의 페이징 처리 방법과 ROWNUM 키워드 (0) | 2021.05.16 |
JQuery 슬라이더와 달력 구현하기 (0) | 2021.05.16 |
Spring의 MVC 패턴 (0) | 2021.05.16 |
Spring의 Form 데이터 값 검증, JS의 이벤트 처리 (0) | 2021.05.16 |
최근댓글