Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 자바
- AJAX
- 오류
- 깃허브
- Eclipse
- myBatis
- github
- java
- 오블완
- 기업설명회
- icon
- chart.js
- jQuery
- error
- 코딩
- restapi
- 티스토리챌린지
- SQL
- bootstrap
- Firebase
- 웹개발
- spring
- SQLD
- JavaScript
- HTML
- 스파르타코딩클럽
- vscode
- CSS
- firestore
- 이클립스
Archives
- Today
- Total
푸들푸들
1217 엑셀 파일 다운로드 ajax 본문
@Mapper
public interface ActorMapper {
List<Map<String, Object>> selectActorList(Map<String, Object> paramMap);
}
<mapper namespace="com.example.restSakila.mapper.ActorMapper">
<select id="selectActorList" parameterType="map" resultType="map">
SELECT
actor_id actorId
, first_name firstName
, last_name lastName
, last_update lastUpdate
FROM actor
LIMIT #{beginRow}, #{rowPerPage}
</select>
</mapper>
@Service
@Transactional
public class ActorService {
@Autowired ActorMapper actorMapper;
private final int ROW_PER_PAGE = 10;
public List<Map<String, Object>> getActorList(Integer currentPage) {
int beginRow = (currentPage-1) * ROW_PER_PAGE;
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("beginRow", beginRow);
paramMap.put("rowPerPage", ROW_PER_PAGE);
return actorMapper.selectActorList(paramMap);
}
}
10개만 조회
@Controller
public class ActorController {
@Autowired ActorService actorService;
@GetMapping("/actorList")
public String actorList(Model model,@RequestParam(defaultValue="1") Integer currentPage) {
model.addAttribute("list", actorService.getActorList(currentPage));
model.addAttribute("currentPage", currentPage);
return "actorList";
}
}
@RestController
public class ActorRest {
@Autowired ActorService actorService;
@GetMapping("/rest/actorList/{currentPage}")
public List<Map<String,Object>> actorList(@PathVariable Integer currentPage) {
return actorService.getActorList(currentPage);
}
}
<h1>ACTOR LIST</h1>
<input type="hidden" id="currentPage" value="${currentPage}">
<div>
<button type="button" id="btnExcel">엑셀파일로 다운로드</button>
</div>
<table class="table">
<thead>
<tr>
<th>Actor ID</th>
<th>First Name</th>
<th>Last Name</th>
<th>Last Update</th>
<tr>
</thead>
<c:forEach var="a" items="${list}">
<tr>
<td>${a.actorId}</td>
<td>${a.firstName}</td>
<td>${a.lastName}</td>
<td>${a.lastUpdate}</td>
</tr>
</c:forEach>
</table>
<!-- excel api : sheetjs-->
<script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.15.5/xlsx.full.min.js"></script>
<!-- file download api : FileServer saveAs-->
<script src="https://cdnjs.cloudflare.com/ajax/libs/FileSaver.js/1.3.8/FileSaver.min.js"></script>
<script>
// ajax 반환값 -> 엑셀객체(sheetjs) -> 엑셀파일(FileServer saveAs)
let table = []; // 엑셀객체에 사용할 데이터
$('#btnExcel').click(function(){
$.ajax({
async : false
, url:'/rest/actorList/'+$('#currentPage').val()
, type: 'get'
}).done(function(result){
// console.log(result);
$(result).each(function(index,item){
let row = []; // 엑셀객체의 행에 사용할 데이터
row.push(item.actorId);
row.push(item.firstName);
row.push(item.lastName);
row.push(item.lastUpdate);
// 엑셀객체 사용할 데이터
table.push(row);
})
}).fail(function(){
alert('실패!')
});
// 엑셀객체에 사용할 데이터 생성(ajax result -> 데이터)
// 1) 엑셀 객체 생성자 호출
let book = XLSX.utils.book_new();
// 2) 엑셀 객체에 빈 sheet 생성
book.SheetNames.push('one');
// 3) 2)의 빈 sheet에 엑셀객체 데이터에 sheet객체 생성 후 book에 대입
let sheet = XLSX.utils.aoa_to_sheet(table);
book.Sheets['one'] = sheet;
// book객체를 엑셀파일로 변경
let bin = XLSX.write(book,{bookType:'xlsx', type:'binary'});
// bin 크기의 burffer(스트림) 생성
let buf = new ArrayBuffer(bin.length);
let buf2 = new Uint8Array(buf);
for(let i=0; i<bin.length; i++){
buf2[i] = bin.charCodeAt(i) & 0xFF; // 디코딩
}
// buf2를 이용하여 엑셀 파일 생성
let f = new Blob([buf2], {type:"application/octet-stream"});
saveAs(f, 'actor.xlsx');
});
</script>
'구디아카데미 > JAVA' 카테고리의 다른 글
1218 비밀번호 암호화 (0) | 2024.12.18 |
---|---|
1218 인코딩, 디코딩 (0) | 2024.12.18 |
1217 사인 이미지 전송 ajax (0) | 2024.12.17 |
[클라우드] AWS Lightsail Ubuntu 20.04 JDK 설치 (0) | 2024.12.16 |
1212 [Sakila]Chart.js (1) | 2024.12.16 |