728x90
<select id="selectFileList" parameterType="int"
resultType="hashMap">
SELECT FILE_NO,
ORG_FILE_NAME,
ROUND(FILE_SIZE/1024,1) AS FILE_SIZE
FROM MP_FILE
WHERE BNO = #{BNO}
AND DEL_GB = 'N'
ORDER BY FILE_NO ASC
</select>
먼저 Mapper를 작성해준다.
필요한 파라미터는 BNO(게시글 PR)이기 때문에 파라미터 타입을 int로 받고,
결과값은 첨부파일의 파라미터인 Map으로 넘긴다.
파일사이즈는 1024당 1로 나누어 kb로 계산하고
삭제여부가 N인 파일을 FILE_NO(파일PR)을 기준으로 오름차순으로 정렬한다.
DAO작성
BoardDAO
public List<Map<String, Object>> selectFileList(int bno) throws Exception;
BoardDAOImpl
@Override
public List<Map<String, Object>> selectFileList(int bno) throws Exception {
// TODO Auto-generated method stub
return sqlSession.selectList("boardMapper.selectFileList", bno);
}
조회에 필요한 bno값을 매개변수로 잡아주고, Mapper 위치와 파라미터를 List로 넣어준다.
BoardService
public List<Map<String, Object>> selectFileList(int bno) throws Exception;
BoardServiceImpl
@Override
public List<Map<String, Object>> selectFileList(int bno) throws Exception {
return dao.selectFileList(bno);
}
서비스도 마찬가지로 컨트롤러에서 받아온 bno를 매개변수,파라미터로 넣어준다
컨트롤러의 글 내용 조회(글 상세페이지) 부분에 코드를 추가해준다.
첨부파일조회는 당연히 해당 게시글의 내용부분에서 확인하기 때문에, 같은 컨트롤러에 담아준다
List<Map<String, Object>> fileList = service.selectFileList(boardVO.getBno());
model.addAttribute("file", fileList);
글 내용 확인시에 받아오는 파라미터들의 getter&setter인 boardVO에서 bno값을 get으로 구해서
파일조회 서비스에 파라미터로 넣어준다. service-dao-mapper-model 순으로 이어져서 나오는 값을
"file" 이라는 키에 담아서 뷰단으로 넘겨준다.
글 상세내용 뷰단의 원하는 위치에 forEach문으로 파일들을 모두 가져온다.
<span>파일 목록</span>
<div class="form-group" style="border: 1px solid #dbdbdb;">
<c:forEach var="file" items="${file}">
<a href="#" onclick="fn_fileDown('${file.FILE_NO}'); return false;">${file.ORG_FILE_NAME}</a>(${file.FILE_SIZE}kb)<br>
</c:forEach>
</div>
파일 다운로드 기능을 위한 onclick을 미리 넣어놓았다.
그 후
글 상세내용값을 가져오는 form 태그에
<input type="hidden" id="FILE_NO" name="FILE_NO" value="">
뷰단에서 submit시에 파일번호를 컨트롤러로 넘겨주는 코드를 같이 넣어주도록 하자.
나중에 파일번호를 기준으로 첨부파일 수정/삭제를 하기 위해서다.
728x90
'SPRING > IceWater Community' 카테고리의 다른 글
[스프링] 첨부파일 다중파일 구현, 수정,삭제 로직의 설명(4) (2) | 2021.08.30 |
---|---|
[스프링]게시판 첨부파일 다운로드 (3) (1) | 2021.08.30 |
[스프링]게시판 첨부파일 업로드 구현 설명(insert) (1) (1) | 2021.08.30 |
[스프링]-댓글 수 구현 : 동기,비동기 방식을 사용할 때의 구현, 차이점과 2가지의 댓글 수 변경 로직 (0) | 2021.08.26 |
[스프링] 게시글 조회수와 트랜잭션 구현 (0) | 2021.08.25 |