Apache Commons FileUpload » 1.5
Apache Commons Net 3.6
com.squareup.okhttp3 얜 버전 빼고
=> pom.xml에 추가
🤷♂️❓ paging 반복분 사용시
<!-- Controller에서 요렇게 찍어줬을 때 -->
int ea=10;
m.addAttribute("ea",ea);
<li class="page-item" th:each="num : ${#numbers.sequence(1,ea)}">
<a href="#" class="page-link">[[${num}]]</a>
</li>
=> 잘돌아감
<!-- th:each는 넘어온 값이 배열이어야만 돌아감 -->
<li class="page-item" th:each="num : ${ea}">
<a href="#" class="page-link">1</a>
</li>
=> 이건 안돌아감
#numbers
숫자 포맷을 적용할때 사용함
소수점,정수,통화형식,퍼센트
sequence
숫자 범위를 설정 (시작값,종료값,step)
※ Controller에서 숫자값을 addAttribute 로 설정하더라도 , th:each로는 반복문이 작동하지 X
=> th:each 근본 반복문은 배열(클래스,원시) 기준
단, #numbers.sequence를 이요시 강제로 반복문 활성화 시킬 수 있음
🤷♂️❓ thymeleaf 소숫점 활성화
<div th:each="n : ${T(java.lang.Math).ceil(ea/4)}">[[${n}]]</div>
👀 list + search +paging ..
- Controller
list 수정
//thymeleaf로 list 출력 (jpa)
@GetMapping("/checkout/member_list")
public String member_list(Model m,
@RequestParam(value="",required = false) String search_id,
@RequestParam(value="",required = false) String search_part,
@RequestParam(value="",required = false) Integer pageno
) {
//DB에 있는 전체 데이터를 DAO를 이용하여 thymeleaf로
List<jpa_dao> all = null;
//page번호를 node번호로 변경
Integer pgn = 0;
if(pageno == null) {
pageno=1;
pgn = 0;
}else if(pageno>0) {
pgn = pageno-1;
}
m.addAttribute("pageno",pageno);
//전체 data갯수를 파악하기 위함 (paging)
List<jpa_dao> alldata = wr.findByOrderByUidxDesc();
int dataea = alldata.size(); //전체회원 수
int pg = (int)Math.ceil((double)dataea/2);
System.out.println(pg + "여기");
m.addAttribute("pg",pg);
//DB에 있는 전체 데이터를 DAO를 이용하여 thymeleaf로 값 전달
if(search_part==null&&search_id==null) { //검색이 없을 경우
PageRequest limit = PageRequest.of(pgn, 2); //(node,출력갯수)
all=wr.findAllByOrderByUidxDesc(limit);
} else {
//검색에 대한 데이터를 DTO에 setter로 담아서 thymeleaf로 데이터 전달
if(search_part.equals("nm")) {
all=wr.findByUnameLikeOrderByUidxDesc("%"+search_id+"%");
} else if(search_part.equals("id")) {
all=wr.findByUidLikeOrderByUidxDesc("%"+search_id+"%");
} else {
//연락처로 사용자를 검색시 utel like "%검색어%"
all=wr.findByUtelLikeOrderByUidxDesc("%"+search_id+"%");
}
}
m.addAttribute("ea" , dataea);
m.addAttribute("search_part", search_part);
m.addAttribute("search_id", search_id);
m.addAttribute("all",all);
return "/checkout/member_list.html";
}
PageRequest
jpa에서는 limit이 없음 => 배열 그룹형태 분할해서 data 출력
PageRequest limit = PageRequest.of(0, 2); //(node,출력갯수)
- 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(PageRequest limit); // 요거 추가
List<jpa_dao> findByUidx(int uidx);//한 개의 정보만 출력
List<jpa_dao> findByUnameLikeOrderByUidxDesc(String search_id); //이름으로 검색 Like
List<jpa_dao> findByUidLikeOrderByUidxDesc(String search_id);//아이디로 검색 Like
List<jpa_dao> findByUtelLikeOrderByUidxDesc(String search_id);//연락처로 검색 Like
}
- member_lit.html
<body>
<div class=container>
<br>
<p>회원 전체 리스트 : 가입자수 ( <span th:text="${ea}"></span> 명 )</p>
<form id="search_frm" method="get" action="./member_list">
<select name="search_part">
<option value="nm">이름</option>
<option value="id">아이디</option>
<option>연락처</option>
</select>
<div class="row" style="padding-left : 20px;">
<input type="text" class="form-control" style="width:150px;" name="search_id">
<input type="submit" value="검색" class="btn btn-dark">
</div>
</form>
<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="${ea-(pageno-1)*2-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>
<section aria-lebel="Page navigation example">
<ul class="pagination" style="justify-content: center;">
<li class="page-item"><a href="#" class="page-link"><</a></li>
<li class="page-item" th:each="page : ${#numbers.sequence(1,pg)}">
<span th:if=${pageno==page}>
<a th:href="|./member_list?pageno=${page}|" style="background-color : blue" class="page-link">[[${page}]]</a>
</span>
<span th:if=${pageno!=page}>
<a th:href="|./member_list?pageno=${page}|" class="page-link">[[${page}]]</a>
</span>
</li>
<li class="page-item"><a href="#" class="page-link">></a></li>
</ul>
</section>
<br><br>
<br>
<a href="./index.do" class="btn btn-secondary">회원가입 페이지</a>
</div>
</body>
'CLASS > SPRINGBOOT' 카테고리의 다른 글
#9-3 / CDN FTP 파일 업로드 사용법 (0) | 2024.08.27 |
---|---|
#9-2 / Thymeleaf 부가사용 방법 (with , T, formatInteger.. ) (0) | 2024.08.27 |
#8-4 / JPA 4 - 회원가입 search (0) | 2024.08.27 |
#8-2 / JPA 4 - 회원가입 modify , update (0) | 2024.08.23 |
#8-1 / JPA 3 - 회원가입 list , delete ( onclick() + thymeleaf ) (0) | 2024.08.23 |