이번에 구현할 기능은 모두 보기 / 선생님만 보기 / 학생만 보기 를 선택적으로 할 수 있는 기능이다.
먼저 Student와 Teacher 중 어떤 값이 true인지 알기 위해서 Form을 하나 작성해주었다. 그 안에 컬럼은 당연하게도 student와 teacher를 만들었다.
유저 컨트롤러에서는 먼저 Get방식으로 읽어와서 model에 addAttribute를 사용해 UserListForm을 넣고 반환하도록 구성한다. 그리고 HTML에서는 전에 작성한 회원가입 페이지 코드와 비슷하게 타임리프 선언을 해주고 체크박스를 두개 만들어준다. 안에 값은 student와 teacher로 설정했다.
<form role="form" action="/user/userList" th:object="${userList}"
method="POST">
<div class="form-group">
<label th:for="student">학생만 보기</label>
<input type="checkbox" class="form-check-student" id="student"
th:field="*{student}">
</div>
<div class="form-group">
<label th:for="teacher">선생님만 보기</label>
<input type="checkbox" class="form-check-teacher" id="teacher"
th:field="*{teacher}">
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
그리고 컨트롤러에서 넘어올 데이터를 시각화하기 위해서 th:each를 이용해서 자바의 for each문과 비슷하게 데이터를 한줄씩 받아서 넣을 수 있도록 구성한다.
<thead>
<tr>
<th>#</th>
<th>아이디</th>
<th>비밀번호</th>
<th>이름</th>
<th>호칭</th>
<th>등록일</th>
</tr>
</thead>
<tbody>
<tr th:each="user : ${users}">
<td th:text="${user.id}"></td>
<td th:text="${user.loginId}"></td>
<td th:text="${user.loginPw}"></td>
<td th:text="${user.name}"></td>
<td th:text="${user.schoolCategory}"></td>
<td th:text="${user.regDate}"></td>
</tr>
</tbody>
그리고 Post방식으로 받아온 체크박스 두개의 참거짓 상태를 확인하기 위해서 log.info를 사용한다.
log.info("\nstudent = {}\nteacher = {}", form.getStudent(), form.getTeacher());
그 후 조건문으로 학생이 참이라면 학생 리스트를, 선생님이 참이라면 선생님 리스트를 불러오고 카운트 변수를 하나 넣어서 만약 카운트가 두개 이상 혹은 0이라면 전체를 불러오도록 구성했다. 그 후 아무 데이터도 없을 경우를 대비해 조건문으로 리스트가 비어있다면 빌더패턴으로 null 데이터를 model에 넣어서 null을 출력할 수 있도록 하고, 비어있지 않다면 해당 리스트를 model에 넣어 반환했다.
if (!findList.isEmpty()) {
model.addAttribute("users", findList);
} else {
User user = User.builder()
.name(null)
.loginId(null)
.loginPw(null)
.schoolCategory(null)
.regDate(null)
.build();
model.addAttribute("users", user);
}
후기
이번 컨트롤러는 전에 했던 것을 우려 먹듯이 다시 한거라 딱히 어려운 부분은 없었으나 더 깔끔하게 코드를 짤 수 있을 것 같은데 아직은 잘 모르겠어서 계속 지켜볼 생각이다. 이 글을 마지막으로 지금까지 완성한 기능을 모두 기록했고 이후로는 하루에 한번씩 개발일지를 작성할 것이다.
'개발일지_development diary > YSit' 카테고리의 다른 글
YSit [10] - 세션 사용하여 쿠키 대체하기 (0) | 2022.12.28 |
---|---|
YSit [9] - 유저 데이터 수정하기, 로그아웃하기 ( 쿠키 사용 ) (0) | 2022.12.27 |
YSit [7] - UserController 개발하기 (0) | 2022.12.24 |
YSit [6] - 유저 기능 테스트하기 (0) | 2022.12.24 |
YSit [5] - UserRepository, Service 개발하기 (0) | 2022.12.24 |