👀 thymeleaf로 list 출력 (jpa)
- /checkout/member_list (list, delete 공통)
<body>
<div class=container>
<br>
<p>회원 전체 리스트 : 가입자수 ( <span th:text="${all.size}"></span> 명 )</p>
<table class="table table-hover">
<thead>
<tr style="text-align : center;">
<th scope="col">번호</th>
<th scope="col">아이디</th>
<th scope="col">이름</th>
<th scope="col">이메일</th>
<th scope="col">연락처</th>
<th scope="col">수정/삭제</th>
</tr>
</thead>
<tbody>
<tr style="text-align : center;" th:each="info : ${all}">
<th scope="row" th:text="${infoStat.size-infoStat.index}"></th>
<td th:text="${info.uid}"></td>
<td th:text="${info.uname}"></td>
<td th:text="${info.uemail}"></td>
<td th:text="${info.utel}"></td>
<td>
<input type="button" class="btn btn-info btn-sm" value="수정" th:onclick="modify_user('[[${info.uidx}]]')">
<input type="button" class="btn btn-danger btn-sm" value="삭제" th:onclick="delete_user('[[${info.uidx}]]')">
</td>
</tr>
<form id="mfrm" method="post" action="./member_modify">
<input type="hidden" name="uidx" value="">
</form>
</tbody>
</table>
<br>
<a href="./index.do" class="btn btn-secondary">회원가입 페이지</a>
</div>
</body>
<script>
function modify_user(no){
mfrm.uidx.value=no;
mfrm.submit();
}
function delete_user(no){
if(confirm("정말 삭제하시겠습니까? \n데이터는 복구되지 않습니다.")){
location.href='./member_del?uidx='+no;
}
}
</script>
🤷♂️❓ th:이벤트 핸들링 속성 (onchage,onsubmit,onclick.... 등)
javascript에 thymeleaf로 넘어온 값을 전달하고 싶을 땐 ${ } 변수를 [[ ]] 로 한번 더 감싸야함
th:onclick="delete_user('[[${info.uidx}]]')"
맨 마지막에 가입한 항목이 맨 위에 나와야함
- Controller
@Autowired
web_repo wr; //interface load
//thymeleaf로 list 출력 (jpa)
@GetMapping("/checkout/member_list")
public String member_list(Model m) {
//DB에 있는 전체 데이터를 DAO를 이용하여 thymeleaf로
List<jpa_dao> all = wr.findByOrderByUidxDesc();
m.addAttribute("all",all);
return "/checkout/member_list.html";
}
- web_repo.java (interface) 추가
//회원가입 및 로그인 ,회원리스트 ,회원 삭제, 회원정보수정
public interface web_repo extends JpaRepository<jpa_dao, Integer>{
@Query("select now()")
String mysql_times();
//아이디 체크 메소드
Optional<jpa_dao> findByUid(String uid); //findBy~ : 검색(== select)
//list 출력 메소드
List<jpa_dao> findAll(); //그냥 전체출력
List<jpa_dao> findByOrderByUidxDesc(); //== odrder by uidx desc
List<jpa_dao> findAllByOrderByUidxDesc(); //== odrder by uidx desc
}
⭐ findby : where, 또는 부가적인 order by , group by로 검색하는 select
findAll : where 없는 select ( 걍 전체 데이터 )
findByOrderByUidxDesc : == odrder by uidxdesc (가운데 uidx만 dao 변수명과 맞춰서 써주면 됨)
( -> findAllByOrderByUidxDesc 요것두 똑같 아무거나 쓰면됨 )
👀 delete
- html은 list, delete 공통 - 위에있음
- Controller
@Autowired
web_repo wr; //interface load
@GetMapping("/checkout/member_del")
public String member_del(int uidx, ServletResponse res) {
res.setContentType("text/html;charset=utf-8");
try {
this.pw = res.getWriter();
if(uidx!=0) {
jpa_dao jd = new jpa_dao(); //메소드 밖에 선언해주는게 좋음
jd.setUidx(uidx);
wr.delete(jd); //삭제
this.pw.print("<script>"
+ "alert('정상적으로 삭제 완료되었습니다.');"
+ "location.href='./member_list';"
+ "</script>");
this.pw.close();
}
} catch (IOException e) {
this.pw.print("<script>"
+ "alert('데이터 오류 발생으로 삭제 실패했습니다.');"
+ "location.href='./member_list';"
+ "</script>");
}finally {
this.pw.close();
}
return null;
}
delete , save 는 interface에 뭘 따로 추가해주지 않아도 됨
=> 수정은 다음페이지
'CLASS > SPRINGBOOT' 카테고리의 다른 글
#8-4 / JPA 4 - 회원가입 search (0) | 2024.08.27 |
---|---|
#8-2 / JPA 4 - 회원가입 modify , update (0) | 2024.08.23 |
#7-2 / JPA 2 - 회원가입 중복체크 , insert (0) | 2024.08.22 |
#7-1 / JPA 1 - 회원가입 (0) | 2024.08.21 |
#6-3 / thymeleaf - 2차배열 출력 (0) | 2024.08.21 |