[ADD] 部署登録機能の実装
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
package com.example.rhizome.app.presentation.controller;
|
||||
|
||||
import static com.example.rhizome.app.presentation.controller.pageproperty.TransitionTargetPageNameKeyword.*;
|
||||
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import javax.servlet.http.HttpSession;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.ui.Model;
|
||||
import org.springframework.web.bind.annotation.ModelAttribute;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMethod;
|
||||
|
||||
import com.example.rhizome.aop.aspect.PermissionCheck;
|
||||
import com.example.rhizome.aop.aspect.SessionCheck;
|
||||
import com.example.rhizome.app.domain.service.SearchDepartment;
|
||||
import com.example.rhizome.app.domain.service.impl.SearchDepartmentImpl;
|
||||
import com.example.rhizome.app.presentation.controller.pageproperty.PageReturnAttributeKeyword;
|
||||
import com.example.rhizome.app.presentation.controller.pageproperty.TransitionTargetPageNameKeyword;
|
||||
import com.example.rhizome.app.presentation.form.InsertDepartmentForm;
|
||||
|
||||
@Controller
|
||||
public class InsertDepartmentConfirmController {
|
||||
|
||||
private final static Logger LOGGER = Logger.getLogger(InsertDepartmentConfirmController.class.getName());
|
||||
|
||||
private final static String SEVERE_ERROR_MESSAGE = "エラーが発生しました!";
|
||||
|
||||
HttpSession httpSession;
|
||||
SearchDepartment searchDepartment;
|
||||
|
||||
@Autowired
|
||||
public InsertDepartmentConfirmController(
|
||||
HttpSession httpSession,
|
||||
SearchDepartmentImpl searchDepartment) {
|
||||
this.httpSession = httpSession;
|
||||
this.searchDepartment = searchDepartment;
|
||||
}
|
||||
|
||||
@ModelAttribute
|
||||
public InsertDepartmentForm insertDepartmentForm() {
|
||||
return new InsertDepartmentForm();
|
||||
}
|
||||
|
||||
@PermissionCheck
|
||||
@SessionCheck
|
||||
@RequestMapping(value = INSERT_DEPARTMENT_CONFIRM, method = RequestMethod.POST)
|
||||
public String insertDepartmentConfirm(InsertDepartmentForm insertDepartmentForm, Model model) {
|
||||
|
||||
try {
|
||||
model.addAttribute(PageReturnAttributeKeyword.INSERT_DEPARTMENT_FORM, insertDepartmentForm);
|
||||
return TransitionTargetPageNameKeyword.INSERT_DEPARTMENT_CONFIRM_HTML;
|
||||
|
||||
} catch (Exception e) {
|
||||
httpSession.invalidate();
|
||||
|
||||
e.printStackTrace();
|
||||
|
||||
LOGGER.log(Level.SEVERE, SEVERE_ERROR_MESSAGE, e);
|
||||
return TransitionTargetPageNameKeyword.ERROR_HTML;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,120 @@
|
||||
package com.example.rhizome.app.presentation.controller;
|
||||
|
||||
import static com.example.rhizome.app.presentation.controller.pageproperty.TransitionTargetPageNameKeyword.*;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import javax.servlet.http.HttpSession;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.ui.Model;
|
||||
import org.springframework.web.bind.annotation.ModelAttribute;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMethod;
|
||||
|
||||
import com.example.rhizome.aop.aspect.PermissionCheck;
|
||||
import com.example.rhizome.aop.aspect.SessionCheck;
|
||||
import com.example.rhizome.app.domain.model.Department;
|
||||
import com.example.rhizome.app.domain.model.SearchConditionDepartment;
|
||||
import com.example.rhizome.app.domain.service.RegisterDepartment;
|
||||
import com.example.rhizome.app.domain.service.SearchDepartment;
|
||||
import com.example.rhizome.app.domain.service.impl.RegisterDepartmentImpl;
|
||||
import com.example.rhizome.app.presentation.controller.pageproperty.PageReturnAttributeKeyword;
|
||||
import com.example.rhizome.app.presentation.controller.pageproperty.TransitionTargetPageNameKeyword;
|
||||
import com.example.rhizome.app.presentation.form.InsertDepartmentForm;
|
||||
import com.example.rhizome.app.presentation.form.MessageForm;
|
||||
|
||||
@Controller
|
||||
public class InsertDepartmentController {
|
||||
|
||||
private final static Logger LOGGER = Logger.getLogger(InsertDepartmentController.class.getName());
|
||||
|
||||
private final static String SEVERE_ERROR_MESSAGE = "エラーが発生しました!";
|
||||
|
||||
HttpSession httpSession;
|
||||
RegisterDepartment registerDepartment;
|
||||
SearchDepartment searchDepartment;
|
||||
|
||||
@Autowired
|
||||
public InsertDepartmentController(HttpSession httpSession, RegisterDepartmentImpl registerEmployee,
|
||||
SearchDepartment searchDepartment) {
|
||||
this.httpSession = httpSession;
|
||||
this.registerDepartment = registerEmployee;
|
||||
this.searchDepartment = searchDepartment;
|
||||
}
|
||||
|
||||
@ModelAttribute
|
||||
public InsertDepartmentForm insertDepartmentForm() {
|
||||
return new InsertDepartmentForm();
|
||||
}
|
||||
|
||||
@PermissionCheck
|
||||
@SessionCheck
|
||||
@RequestMapping(value = INSERT_DEPARTMENT, method = RequestMethod.POST)
|
||||
public String insertDepartment(InsertDepartmentForm insertDepartmentForm, Model model) {
|
||||
|
||||
try {
|
||||
List<String> error = validateParameter(
|
||||
insertDepartmentForm.getNmDepartment());
|
||||
|
||||
if (!error.isEmpty()) {
|
||||
model.addAttribute(PageReturnAttributeKeyword.MESSAGE_ERROR,
|
||||
new MessageForm(String.join(", ", error) + "が不正です。"));
|
||||
model.addAttribute(PageReturnAttributeKeyword.INSERT_DEPARTMENT_FORM, insertDepartmentForm);
|
||||
return TransitionTargetPageNameKeyword.INSERT_DEPARTMENT_INPUT_HTML;
|
||||
}
|
||||
|
||||
final String DUPLICATION = "既に同名の部署が存在します。";
|
||||
|
||||
SearchConditionDepartment searchConditionDepartment = new SearchConditionDepartment(null,
|
||||
insertDepartmentForm.getNmDepartment());
|
||||
|
||||
List<Department> departmentList = searchDepartment.searchByDepartmentName(searchConditionDepartment);
|
||||
|
||||
if (!departmentList.isEmpty()) {
|
||||
model.addAttribute(PageReturnAttributeKeyword.MESSAGE_ERROR, new MessageForm(DUPLICATION));
|
||||
model.addAttribute(PageReturnAttributeKeyword.INSERT_DEPARTMENT_FORM, insertDepartmentForm);
|
||||
return TransitionTargetPageNameKeyword.INSERT_DEPARTMENT_INPUT_HTML;
|
||||
}
|
||||
|
||||
registerDepartment.registerDepartment(InsertDepartmentForm.convertTo(insertDepartmentForm));
|
||||
return TransitionTargetPageNameKeyword.INSERT_DEPARTMENT_RESULT_HTML;
|
||||
|
||||
} catch (Exception e) {
|
||||
httpSession.invalidate();
|
||||
|
||||
e.printStackTrace();
|
||||
|
||||
LOGGER.log(Level.SEVERE, SEVERE_ERROR_MESSAGE, e);
|
||||
return TransitionTargetPageNameKeyword.ERROR_HTML;
|
||||
}
|
||||
}
|
||||
|
||||
private List<String> validateParameter(
|
||||
String departmentName) {
|
||||
|
||||
final String DEPARTMENT_NAME_NULL_BLANK = "部署名";
|
||||
|
||||
List<String> error = new ArrayList<>();
|
||||
|
||||
if (isNullOrBlank(departmentName)) {
|
||||
error.add(DEPARTMENT_NAME_NULL_BLANK);
|
||||
}
|
||||
|
||||
return error;
|
||||
|
||||
}
|
||||
|
||||
private static boolean isNullOrBlank(String str) {
|
||||
if (null == str) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return str.isBlank();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
package com.example.rhizome.app.presentation.controller;
|
||||
|
||||
import static com.example.rhizome.app.presentation.controller.pageproperty.TransitionTargetPageNameKeyword.*;
|
||||
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import javax.servlet.http.HttpSession;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.ui.Model;
|
||||
import org.springframework.web.bind.annotation.ModelAttribute;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMethod;
|
||||
|
||||
import com.example.rhizome.aop.aspect.PermissionCheck;
|
||||
import com.example.rhizome.aop.aspect.SessionCheck;
|
||||
import com.example.rhizome.app.domain.service.RegisterDepartment;
|
||||
import com.example.rhizome.app.presentation.controller.pageproperty.PageReturnAttributeKeyword;
|
||||
import com.example.rhizome.app.presentation.controller.pageproperty.TransitionTargetPageNameKeyword;
|
||||
import com.example.rhizome.app.presentation.form.InsertDepartmentForm;
|
||||
|
||||
@Controller
|
||||
public class InsertDepartmentInputController {
|
||||
|
||||
private final static Logger LOGGER = Logger.getLogger(InsertDepartmentInputController.class.getName());
|
||||
|
||||
private final static String SEVERE_ERROR_MESSAGE = "エラーが発生しました!";
|
||||
|
||||
HttpSession httpSession;
|
||||
RegisterDepartment registerDepartment;
|
||||
|
||||
@Autowired
|
||||
public InsertDepartmentInputController(HttpSession httpSession, RegisterDepartment registerDepartment) {
|
||||
this.httpSession = httpSession;
|
||||
this.registerDepartment = registerDepartment;
|
||||
}
|
||||
|
||||
@ModelAttribute
|
||||
public InsertDepartmentForm insertDepartmentForm() {
|
||||
return new InsertDepartmentForm();
|
||||
}
|
||||
|
||||
@SessionCheck
|
||||
@PermissionCheck
|
||||
@RequestMapping(value = INSERT_DEPARTMENT_INPUT, method = RequestMethod.POST)
|
||||
public String insertInput(InsertDepartmentForm insertDepartmentForm, Model model) {
|
||||
|
||||
try {
|
||||
model.addAttribute(PageReturnAttributeKeyword.INSERT_DEPARTMENT_FORM, insertDepartmentForm);
|
||||
|
||||
return TransitionTargetPageNameKeyword.INSERT_DEPARTMENT_INPUT_HTML;
|
||||
|
||||
} catch (Exception e) {
|
||||
httpSession.invalidate();
|
||||
|
||||
e.printStackTrace();
|
||||
|
||||
LOGGER.log(Level.SEVERE, SEVERE_ERROR_MESSAGE, e);
|
||||
return TransitionTargetPageNameKeyword.ERROR_HTML;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
package com.example.rhizome.app.presentation.form;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import com.example.rhizome.app.domain.model.Department;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class InsertDepartmentForm {
|
||||
|
||||
private String nmDepartment;
|
||||
|
||||
private static boolean isNullOrBlank(String str) {
|
||||
if (null == str) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return str.isBlank();
|
||||
}
|
||||
|
||||
public static Department convertTo(InsertDepartmentForm insertDepartmentForm) {
|
||||
return new Department(
|
||||
null,
|
||||
insertDepartmentForm.getNmDepartment());
|
||||
}
|
||||
|
||||
public List<String> validateParameter() {
|
||||
final String DEPARTMENT_NAME_NULL_BLANK = "部署名";
|
||||
|
||||
List<String> error = new ArrayList<>();
|
||||
|
||||
if (isNullOrBlank(nmDepartment)) {
|
||||
error.add(DEPARTMENT_NAME_NULL_BLANK);
|
||||
}
|
||||
|
||||
return error;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
86
src/main/resources/templates/insertDepartmentConfirm.html
Normal file
86
src/main/resources/templates/insertDepartmentConfirm.html
Normal file
@@ -0,0 +1,86 @@
|
||||
<!DOCTYPE html>
|
||||
<html xmlns:th="http://www.thymeleaf.org">
|
||||
|
||||
<head>
|
||||
|
||||
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
|
||||
<!-- 外部のスクリプトファイルを読み込む -->
|
||||
<script th:src="@{/js/common.js}"></script>
|
||||
<!-- CSSの読み込み -->
|
||||
<link rel="stylesheet" th:href="@{/css/all.css}">
|
||||
<link rel=stylesheet th:href="@{/css/style.css}" type="text/css">
|
||||
<title>登録内容確認</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<h1>登録内容確認
|
||||
<div class="rightSection">
|
||||
<span class="loginInfo">ログイン者名:<span th:text="${session.loginUser.nmEmployee}"></span></span>
|
||||
<button class="logoutButton" onclick="logoutSubmit()">ログアウト</button>
|
||||
</div>
|
||||
</h1>
|
||||
|
||||
<form action="insertDepartment"
|
||||
id="insertForm"
|
||||
method="post"
|
||||
th:object="${insertDepartmentForm}">
|
||||
|
||||
<div class="msgBox error" th:if="${messageError != null}">
|
||||
<span class="error" th:each="message : ${messageError.message}" th:text="${message}"></span>
|
||||
</div>
|
||||
<table>
|
||||
<tr>
|
||||
<th class="header">部署ID</th>
|
||||
<td>
|
||||
<label>
|
||||
<input class="readOnly"
|
||||
name="dptId"
|
||||
readonly="readonly"
|
||||
type="text"
|
||||
value="自動で設定されます"/>
|
||||
</label>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="header">部署名</th>
|
||||
<td>
|
||||
<label>
|
||||
<input class="readOnly"
|
||||
name="nmDepartment"
|
||||
readonly="readonly"
|
||||
th:value="*{nmDepartment}"
|
||||
type="text"/>
|
||||
</label>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="btnArea" colspan="2">
|
||||
<input type="submit" value="登録"/>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<a href="javascript:onClickEdit()">登録内容の編集</a> | <a href="showMenu">メニューに戻る</a>
|
||||
</form>
|
||||
|
||||
<script type="text/javascript">
|
||||
function onClickEdit() {
|
||||
const form = document.getElementById('insertForm');
|
||||
form.setAttribute('method', 'post');
|
||||
form.setAttribute('action', 'insertDepartmentInput');
|
||||
|
||||
const inputField = document.createElement("input");
|
||||
inputField.setAttribute("type", "hidden");
|
||||
inputField.setAttribute("name", "backFlg");
|
||||
inputField.setAttribute("value", "edit");
|
||||
|
||||
form.appendChild(inputField);
|
||||
|
||||
document.body.appendChild(form);
|
||||
|
||||
form.submit();
|
||||
}
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
67
src/main/resources/templates/insertDepartmentInput.html
Normal file
67
src/main/resources/templates/insertDepartmentInput.html
Normal file
@@ -0,0 +1,67 @@
|
||||
<!DOCTYPE html>
|
||||
<html xmlns:th="http://www.thymeleaf.org">
|
||||
|
||||
<head>
|
||||
|
||||
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
|
||||
<!-- 外部のスクリプトファイルを読み込む -->
|
||||
<script th:src="@{/js/common.js}"></script>
|
||||
<!-- CSSの読み込み -->
|
||||
<link rel="stylesheet" th:href="@{/css/all.css}">
|
||||
<link rel=stylesheet th:href="@{/css/style.css}" type="text/css">
|
||||
<title>部署登録</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<h1>
|
||||
部署登録
|
||||
<div class="rightSection">
|
||||
<span class="loginInfo">ログイン者名:<span th:text="${session.loginUser.nmEmployee}"></span></span>
|
||||
<button class="logoutButton" onclick="logoutSubmit()">ログアウト</button>
|
||||
</div>
|
||||
</h1>
|
||||
<form action="insertDepartmentConfirm"
|
||||
method="post"
|
||||
th:object="${insertDepartmentForm}">
|
||||
|
||||
<div class="msgBox error" th:if="${messageError} != null">
|
||||
<span class="error" th:text="${messageError.message}"></span>
|
||||
</div>
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<th class="header">部署ID</th>
|
||||
<td>
|
||||
<label>
|
||||
<input class="readOnly"
|
||||
readonly="readonly"
|
||||
type="text"
|
||||
value="自動で設定されます"
|
||||
/>
|
||||
</label>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="header">部署名</th>
|
||||
<td>
|
||||
<label>
|
||||
<input maxlength="50"
|
||||
placeholder="社員名"
|
||||
required="required"
|
||||
th:field="*{nmDepartment}"
|
||||
type="text"
|
||||
/>
|
||||
</label>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="btnArea" colspan="2">
|
||||
<input type="submit" value="登録確認"/>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
<a href="showMenu">メニューに戻る</a>
|
||||
</body>
|
||||
</html>
|
||||
35
src/main/resources/templates/insertDepartmentResult.html
Normal file
35
src/main/resources/templates/insertDepartmentResult.html
Normal file
@@ -0,0 +1,35 @@
|
||||
<!DOCTYPE html>
|
||||
<html xmlns:th="http://www.thymeleaf.org">
|
||||
|
||||
<head>
|
||||
|
||||
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
|
||||
<script th:src="@{/js/common.js}"></script>
|
||||
<link rel="stylesheet" th:href="@{/css/all.css}">
|
||||
<link rel=stylesheet th:href="@{/css/style.css}" type="text/css">
|
||||
<title>社員登録完了</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<h2>社員登録が完了しました</h2>
|
||||
<br/>
|
||||
<a href="javascript:insertSubmit()">続けて登録する</a> | <a href="showMenu">メニューに戻る</a>
|
||||
</body>
|
||||
<script type="text/javascript">
|
||||
function insertSubmit() {
|
||||
const form = document.createElement('form');
|
||||
form.setAttribute('method', 'post');
|
||||
form.setAttribute('action', 'insertDepartmentInput');
|
||||
|
||||
const inputField = document.createElement("input");
|
||||
inputField.setAttribute("type", "hidden");
|
||||
inputField.setAttribute("value", "select");
|
||||
|
||||
form.appendChild(inputField);
|
||||
|
||||
document.body.appendChild(form);
|
||||
|
||||
form.submit();
|
||||
}
|
||||
</script>
|
||||
</html>
|
||||
Reference in New Issue
Block a user