본문 바로가기
CLASS/SPRINGBOOT

#8-1 / JPA 3 - 회원가입 list , delete ( onclick() + thymeleaf )

by hingu 2024. 8. 23.

  👀 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에 뭘 따로 추가해주지 않아도 됨

 

 

 

=> 수정은 다음페이지