Notice
Recent Posts
Recent Comments
Link
250x250
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
Tags
- CSS
- 자바
- js
- HTML
- 자바스크립트기초문법
- 자바스크립트 기초
- spring
- springboot
- react
- 웹
- 코딩
- 기초코딩
- 스프링부트
- 자바스크립트기초
- javaspring
- mybatis
- 기초 코딩
- 전자정부 서버세팅
- 구글 oauth
- 웹앱
- Javascript
- 마이바티스
- Spring Boot
- 자바스크립트
- 리액트초기세팅
- 처음만나는자바스크립트
- java
- 리액트세팅
- 구글캘린더api
- 리액트프로젝트세팅
Archives
- Today
- Total
인생 디벨로퍼
이력서 등록 (ajax 를 사용한 insert) 본문
728x90
Controller
@GetMapping("/resume/saveForm")
public String resumeForm(Model model) {
Employee principal = (Employee) session.getAttribute("principal");
if (principal == null) {
throw new CustomException("인증이 되지 않았습니다", HttpStatus.UNAUTHORIZED);
}
model.addAttribute("empInfo", employeeRepository.findById(principal.getId()));
List<SchoolMaster> schools = schoolMasterRepository.findAll();
List<LicenseMaster> licenses = licenseMasterRepository.findAll();
List<StackMaster> stacks = stackMasterRepository.findAll();
model.addAttribute("empInfo", employeeRepository.findById(principal.getId()));
model.addAttribute("schools", schools);
model.addAttribute("licenses", licenses);
model.addAttribute("stacks", stacks);
return "resume/saveForm";
}
resumeForm 연결.
작성폼은 세션체크 필수, 각 요소들에서 받아와야하는 컬럼들은 모델로 담아준다.
@PostMapping("/resume/save")
public @ResponseBody ResponseEntity<?> resumeSave(@RequestBody ResumeSaveDto resumeSaveDto) {
System.out.println(resumeSaveDto.toString());
Employee principal = (Employee) session.getAttribute("principal");
if (principal == null) {
throw new CustomApiException("인증이 되지 않았습니다", HttpStatus.UNAUTHORIZED);
}
resumeService.이력서등록(resumeSaveDto, principal.getId());
return new ResponseEntity<>(new ResponseDto<>(1, "이력서 등록 성공", resumeSaveDto.getId()), HttpStatus.OK);
}
https://steponecoding.tistory.com/11
pos 요청 컨트롤러(서비스) 과정에서, @RequstBody 에 대해 한번 알아보자..
@RequestBody 에 관하여...
@RequestBody Spring 프레임워크에서 제공하는 어노테이션. HTTP 요청 body 에 포함된 데이터를 자바 객체로 변환하는 역활을 함. 더보기 HTTP (GET / POST 요청) GET 요청 - URL 뒤에 파라미터를 붙여 데이터를
steponecoding.tistory.com
Service
@Transactional
public void 이력서등록(ResumeSaveDto resumeSaveDto, int employeeId) {
try {
resumeRepository.insert(employeeId, resumeSaveDto);
resumeGraduateRepository.insert(resumeSaveDto.getId(), resumeSaveDto.getSchoolId(),
resumeSaveDto.getSchoolGraduate());
resumeCareerRepository.insert(resumeSaveDto.getId(), resumeSaveDto.getCareerCompany(),
resumeSaveDto.getCareerStart(), resumeSaveDto.getCareerEnd());
resumeLicenseRepository.insert(resumeSaveDto.getId(), resumeSaveDto.getLicenseId(),
resumeSaveDto.getLicenseIssuer());
resumeStackRepository.insert(resumeSaveDto.getId(), resumeSaveDto.getStackId(),
resumeSaveDto.getStackAcquisition());
} catch (Exception e) {
throw new CustomApiException("이력서 등록 실패", HttpStatus.INTERNAL_SERVER_ERROR);
}
}
Repository
public int insert(@Param("employeeId") int employeeId, @Param("resumeSaveDto") ResumeSaveDto resumeSaveDto);
.xml
<insert id="insert" useGeneratedKeys="true" keyProperty="resumeSaveDto.id">
INSERT INTO resume (employee_id, resume_title, resume_salary, CV, created_at) VALUES
(#{employeeId}, #{resumeSaveDto.resumeTitle}, #{resumeSaveDto.resumeSalary}, #{resumeSaveDto.CV}, NOW())
</insert>
.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ include file="../layout/header.jsp" %>
<link rel="stylesheet" href="/css/resumeForm.css">
<div class="my_info_insert">
<div class="my_title">
<h2>이력서 등록</h2>
</div>
<div class="my_yellow_box">
<div class="my_info_box_margin">
<div>
<div class="d-flex justify-content-between">
<div>
<div class="my_name">
<h3>${empInfo.employeeFullname}</h3>
</div>
<div class="d-flex">
<div>
<div>
<span class="my_info_title">생년월일</span>
<span class="my_info">${empInfo.employeeBirth}</span>
</div>
<div>
<span class="my_info_title">연락처</span>
<span class="my_info">${empInfo.employeeTel}</span>
</div>
</div>
<div class="my_info_title_margin">
<div>
<span class="my_info_title">주소</span>
<span class="my_info">${empInfo.employeeAddress}</span>
</div>
<div>
<span class="my_info_title">이메일</span>
<span class="my_info">${empInfo.employeeEmail}</span>
</div>
</div>
</div>
</div>
<div class="my_info_thumbnail">
<img src="${empInfo.employeeThumbnail == null ? '/images/profile.png' : empInfo.employeeThumbnail}"
alt="Current Photo" class="img-fluid" id="imagePreview" />
</div>
</div>
</div>
</div>
</div>
<div>
<div class="my_sub_title_form">
<div class="mb-2">
<span class="main_yellow_label mb-2">제목</span>
</div>
<div>
<input name="resumeTitle" id="resumeTitle" class="form-control my_resume_title_form mb-2"
type="text" placeholder="이력서 타이틀 입력">
</div>
</div>
<div class="mb-3">
<div>
<span class="main_yellow_label mb-2">최종학력</span>
</div>
<div class="d-flex">
<select name="schoolId" id="schoolId" class="main_select_box p-2">
<option value="0">선택해주세요</option>
<c:forEach items="${schools}" var="school">
<option value="${school.id}">${school.schoolName}</option>
</c:forEach>
</select>
<div>
<select name="schoolGraduate" id="schoolGraduate" class="main_select_box p-2">
<option value="0">선택해주세요</option>
<option value="고등학교 졸업">고등학교 졸업</option>
<option value="대학 (2,3년)">대학 (2,3년)</option>
<option value="대학교 (4년)">대학교 (4년)</option>
</select>
</div>
</div>
</div>
<div class="mb-3">
<div class="d-flex mb-2">
<span class="main_yellow_label">경력사항</span>
<div class="form-check my_check" id="isCareerCheck">
<input class="form-check-input" type="checkbox" value="" id="flexCheckDefault" />
</div>
</div>
<div class="align-items-center d-flex mb-2">
<div class="AA"></div>
<span class="my_list">회사명</span>
<input name="careerCompany" id="careerCompany" class="form-control my_career_input"
type="text" />
</div>
<div class="align-items-center d-flex mb-2">
<div class="AA"></div>
<span class="my_list">재직기간</span>
<div class="d-flex my_career_input">
<input name="careerStart" id="careerStart" class="form-control" type="date"
value="0001-01-01" />
<input name="careerEnd" id="careerEnd" class="form-control" type="date"
value="0001-01-01" />
</div>
</div>
</div>
<div>
<div class="d-flex mb-2">
<span class="main_yellow_label">자격증</span>
<div class="form-check my_check">
<input class="form-check-input" type="checkbox" value="" id="flexCheckDefault" readonly>
</div>
</div>
<div class="mb-1">
<div class="row">
<div class="col-md-4">
<div class="d-flex align-items-center mb-2">
<div class="AA"></div>
<span class="my_list">자격증명</span>
<select name="licenseId" id="licenseId" class="main_select_box_title">
<option value="0">선택해주세요</option>
<c:forEach items="${licenses}" var="license">
<option value="${license.id}">${license.licenseName}</option>
</c:forEach>
</select>
</div>
</div>
<div class="col-6 col-md-8">
<div class="d-flex align-items-center">
<div class="AA"></div>
<span class="my_list">발행처</span>
<input id="licenseIssuer" name="licenseIssuer" class="form-control my_util" type="text">
</div>
</div>
</div>
</div>
<div>
<div class="d-flex mb-2">
<span class="main_yellow_label">기술스텍</span>
<div class="form-check my_check">
<input class="form-check-input" type="checkbox" value="" id="flexCheckDefault" readonly>
</div>
</div>
<div class="mb-1">
<div class="row">
<div class="col-md-4">
<div class="d-flex align-items-center mb-2">
<div class="AA"></div>
<span class="my_list">기술명</span>
<select name="stackId" id="stackId" class="main_select_box_title">
<option value="0">선택해주세요</option>
<c:forEach items="${stacks}" var="stack">
<option value="${stack.id}">${stack.stackName}</option>
</c:forEach>
</select>
</div>
</div>
<div class="col-6 col-md-8">
<div class="d-flex align-items-center">
<div class="AA"></div>
<span class="my_list">활용도</span>
<input name="stackAcquisition" id="stackAcquisition" class="form-control my_util" type="text" />
</div>
</div>
</div>
</div>
</div>
</div>
<div class="my_sub_title_form">
<div class="d-flex mb-3">
<span class="main_yellow_label">희망연봉</span>
</div>
<div class="d-flex align-items-center">
<div class="BB"></div>
<input name="resumeSalary" id="resumeSalary" class="form-control" style="width: 30%;"
type="number">
<p class="m-2"> (만 원)</p>
</div>
</div>
</div>
<div class="my_sub_title_form">
<div class="d-flex mb-3">
<span class="main_yellow_label">자기소개서</span>
</div>
<div class="form-group my_summernote">
<textarea class="form-control summernote" rows="5" id="CV" name="CV"></textarea>
</div>
</div>
<div class="my_sub_title_form">
<%-- <div class="d-flex mb-3">
<span class="main_yellow_label">파일등록</span>
</div>
<div class="my_yellow_box">
<div class="my_arrow_box">
<!-- <i class="fa-solid fa-circle-arrow-up my_arrow"></i> -->
<i class="fa-solid fa-circle-up my_arrow"></i>
</div>
<div class="my_file_comment">
<span>등록할 파일을 선택해 주세요 (최대 1개, 10MB)</span>
</div>
</div> --%>
<div>
<div class="button_center d-flex justify-content-center">
<button onclick="save()" class="main_blue_btn" type="button">등록</button>
</div>
</div>
</div>
</div>
</div>
<script>
function save() {
let data = {
"resumeTitle": $("#resumeTitle").val(),
"resumeSalary": $("#resumeSalary").val(),
"cv": $("#CV").val(),
"schoolId": $("#schoolId").val(),
"schoolGraduate": $("#schoolGraduate").val(),
"careerCompany": $("#careerCompany").val(),
"careerStart": $("#careerStart").val(),
"careerEnd": $("#careerEnd").val(),
"licenseId": $("#licenseId").val(),
"licenseIssuer": $("#licenseIssuer").val(),
"stackId": $("#stackId").val(),
"stackAcquisition": $("#stackAcquisition").val()
};
$.ajax({
type: "post",
url: "/resume/save",
data: JSON.stringify(data),
contentType: "application/json; charset=utf-8",
dataType: "json"
}).done((res) => { // 20X 일때
alert(res.msg);
location.href = "/resume/" + res.data + "/detail";
}).fail((err) => {
alert(err.responseJSON.msg);
});
console.log(data);
}
</script>
<script>
$('.summernote').summernote({
tabsize: 2,
height: 400
});
</script>
<%@ include file="../layout/footer.jsp" %>
728x90
'Project > Mini Project - Rodonin (구인구직)' 카테고리의 다른 글
썸네일 등록하기 (1) | 2023.03.12 |
---|---|
이력서 수정 (update) (0) | 2023.03.12 |
@RequestBody 에 관하여... (0) | 2023.03.10 |
이력서 상세보기 / 네버엔딩 select (0) | 2023.03.08 |
이력서 리스트 만들기 (select, ajax 를 이용한 delete) (0) | 2023.03.08 |