
<%@ 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>registEmp</title>
<!-- JQuery -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script>
<script>
$(document).ready(function() { // 웹 페이지가 모든 html 요소를 로드한 후에 내부(JQuery)의 코드를 실행하도록 보장
// 취소 버튼 클릭 시
$('#cancelBtn').click(function() {
let result = confirm('HOME으로 이동할까요?'); // 사용자 선택 값에 따라 true or false 반환
if (result) {
window.location.href = '/home'; // Home으로 이동
}
});
});
</script>
<style>
hr {
border: solid 3px black;
width: 20%;
margin: 0; /* auto 가운데 정렬 */
}
table {
text-align: center;
}
</style>
</head>
<body>
<h3>사원 등록</h3>
<!-- 파일 업로드 -->
<form name="frm1" method="post" action="/emp/registEmp" enctype="multipart/form-data">
<input type="file" name="file1">
<button type="submit" id="fileInput">저장</button>
</form>
<!-- 사원 정보 등록 -->
<form action="/emp/registEmp" method="post">
<input type="hidden" name="empState" value="재직">
<table border="1">
<tr>
<td>사원번호</td>
<td><input type="number" name="empNo" value="${empNo}"></td>
<td><button type="button">사원번호 생성</button></td>
</tr>
<tr>
<td>사원명</td>
<td colspan="2"><input type="text" name="empName"></td>
</tr>
<tr>
<td>부서명</td>
<td colspan="2">
<select name="deptName">
<option value="" <c:if test="${emp.deptName.equals('')}">selected</c:if>>없음</option>
<c:forEach var="d" items="${deptList}">
<option value="${d.deptName}" <c:if test="${emp.deptName.equals(d.deptName)}">selected</c:if>>${d.deptName}</option>
</c:forEach>
</select>
</td>
</tr>
<tr>
<td>팀명</td>
<td colspan="2">
<select name="teamName">
<option value="" <c:if test="${emp.teamName.equals('')}">selected</c:if>>없음</option>
<c:forEach var="t" items="${teamList}">
<option value="${t.teamName}" <c:if test="${emp.teamName.equals(t.teamName)}">selected</c:if>>${t.teamName}</option>
</c:forEach>
</select>
</td>
</tr>
<tr>
<td>직급</td>
<td colspan="2">
<select name="empPosition">
<option value="CEO" <c:if test="${emp.empPosition.equals('CEO')}">selected</c:if>>CEO</option>
<option value="부서장" <c:if test="${emp.empPosition.equals('부서장')}">selected</c:if>>부서장</option>
<option value="팀장" <c:if test="${emp.empPosition.equals('팀장')}">selected</c:if>>팀장</option>
<option value="부팀장" <c:if test="${emp.empPosition.equals('부팀장')}">selected</c:if>>부팀장</option>
<option value="사원" <c:if test="${emp.empPosition.equals('사원')}">selected</c:if>>사원</option>
</select>
</td>
</tr>
<tr>
<td>권한</td>
<td colspan="2">
<select name="accessLevel">
<option value="0" <c:if test="${emp.accessLevel.equals('0')}">selected</c:if>>0레벨</option>
<option value="1" <c:if test="${emp.accessLevel.equals('1')}">selected</c:if>>1레벨</option>
<option value="2" <c:if test="${emp.accessLevel.equals('2')}">selected</c:if>>2레벨</option>
<option value="3" <c:if test="${emp.accessLevel.equals('3')}">selected</c:if>>3레벨</option>
</select>
</td>
</tr>
<tr>
<td>입사일</td>
<td colspan="2">
<input type="date" name="employDate">
</td>
</tr>
</table>
<br>
<hr><!-- 구분선 -->
<br>
<button type="button" id="cancelBtn">취소</button><!-- 좌정렬 -->
<button type="submit" id="saveBtn">등록</button><!-- 우정렬 -->
<!-- 목록으로 보내기 -->
</form>
</body>
</html>
파일업로드 기능 미완성.
view_version2
// 인사 등록 폼
@GetMapping("/emp/registEmp")
public String showEmployeeRegistrationForm(Model model) {
// 부서, 팀 정보 조회 Map에서 가져와 분리
Map<String, Object> departmentAndTeamInfo = empService.getDeptAndTeamList();
model.addAttribute("deptList", departmentAndTeamInfo.get("deptList")); // 부서 정보 리스트
model.addAttribute("teamList", departmentAndTeamInfo.get("teamList")); // 팀 정보 리스트
return "/emp/registEmp"; // 인사등록 폼으로 이동
}
// 인사 등록 액션
@PostMapping("/emp/registEmp")
public String processEmployeeRegistration(@RequestParam(required = true, defaultValue = "0.0", name = "remainDays")
@ModelAttribute("empInfo") EmpInfo empInfo ) {
// empInfo VO 값을 전달하여 addEmp 메서드 실행
int rowCount = empService.addEmp(empInfo);
log.debug(CC.YE + "EmpController.registEmp() rowCount: " + rowCount + CC.RESET);
return "redirect:/emp/empList"; // 인사목록 페이지로 리다이렉트
}
view를 호출할 GetMapping의 주소로써 "/emp/registEmp"를 설정.
select box에 쓸 List를 전달해주기 위해서 Model 값을 매개변수로 넣었고
Map을 List를 분리해 view에 보내줌.
// 사원 등록 폼
@GetMapping("/emp/registEmp")
public String registEmp(Model model) {
// 부서, 팀 정보 조회 Map에서 가져와 분리
Map<String, Object> departmentAndTeamInfo = empService.getDeptAndTeamList();
model.addAttribute("deptList", departmentAndTeamInfo.get("deptList")); // 부서 정보 리스트
model.addAttribute("teamList", departmentAndTeamInfo.get("teamList")); // 팀 정보 리스트
return "/emp/registEmp"; // 인사등록 폼으로 이동
}
// 사원 등록 액션
@PostMapping("/emp/registEmp")
public String registEmp(@ModelAttribute("empInfo") EmpInfo empInfo ) {
// empInfo VO 값을 전달하여 addEmp 메서드 실행
int rowCount = empService.addEmp(empInfo);
log.debug(CC.YE + "EmpController.registEmp() rowCount: " + rowCount + CC.RESET);
return "redirect:/emp/empList"; // 인사목록 페이지로 리다이렉트
}
// 인사 정보 등록
public int addEmp(EmpInfo empInfo) {
// 인사 정보 등록
int addEmpRow = empMapper.addEmp(empInfo);
log.debug(CC.YE + "EmpService.addEmp() row : " + addEmpRow + CC.RESET);
// 사원번호 사용여부 등록
if( addEmpRow > 0) {
int addEmpNoRow = empMapper.addEmpNo(empInfo.getEmpNo());
log.debug(CC.YE + "EmpService.addEmpNoRow() row : " + addEmpNoRow + CC.RESET);
}
return addEmpRow; // 사원 정보 등록 결과를 반환
}

addEmpNoRow의 쿼리 처리 결과
==> Preparing: INSERT INTO emp_no_list ( emp_no , active , createdate ) VALUES ( ? , 'Y' , NOW() )
==> Parameters: 1111119(Integer)
<== Updates: 1
addEmpRow의 쿼리 처리 결과
==> Preparing: INSERT INTO emp_info( emp_no , emp_name , dept_name , team_name , emp_position , access_level , emp_state , employ_date , remain_days , createdate , updatedate ) VALUES ( ? , ? , ? , ? , ? , ? , ? , ? , ? , NOW() , NOW() )
==> Parameters: 1111119(Integer), 김냠(String), 영업지원본부(String), 영업팀(String), 사원(String), 0(String), 재직(String), 2023-08-17(String), 0.0(Double)
<== Updates: 1
// 인사정보 등록
int addEmp(EmpInfo empInfo);
// 사원번호 사용여부 등록
int addEmpNo(int empNo);
<!-- 인사 정보 등록 -->
<insert id="addEmp" parameterType="com.fit.vo.EmpInfo">
<selectKey order="AFTER" keyProperty="empNo" resultType="int">
SELECT LAST_INSERT_ID()
</selectKey>
INSERT INTO emp_info(
emp_no
, emp_name
, dept_name
, team_name
, emp_position
, access_level
, emp_state
, employ_date
, remain_days
, createdate
, updatedate
) VALUES (
#{empNo}
, #{empName}
, #{deptName}
, #{teamName}
, #{empPosition}
, #{accessLevel}
, #{empState}
, #{employDate}
, #{remainDays}
, NOW()
, NOW()
)
</insert>
<!-- 사원번호 사용여부 등록 -->
<insert id="addEmpNo" parameterType="int">
INSERT INTO emp_no_list (
, emp_no
, active
, createdate
) VALUES (
#{empNo}
, 'Y'
, NOW()
)
</insert>
<!-- 사원번호 등록 -->
<insert id="addEmpNo" parameterType="int">
INSERT INTO emp_no_list (
emp_no
, active
, createdate
) VALUES (
#{empNo}
, 'Y'
, NOW()
)
</insert>
<!-- 인사 정보 등록 -->
<insert id="addEmp" parameterType="com.fit.vo.EmpInfo">
INSERT INTO emp_info(
emp_no
, emp_name
, dept_name
, team_name
, emp_position
, access_level
, emp_state
, employ_date
, remain_days
, createdate
, updatedate
) VALUES (
#{empNo}
, #{empName}
, #{deptName}
, #{teamName}
, #{empPosition}
, #{accessLevel}
, #{empState}
, #{employDate}
, #{remainDays}
, NOW()
, NOW()
)
</insert>