본문 바로가기
CLASS/SPRING,JSTL

#5-1 / gallery board select-view (spring + I/O + database)

by hingu 2024. 7. 12.

 

- shop_main2.java 에 추가 - @GetMapping("/gallery_view.do") (Contoller)

public static int m_gidx; //메모리를 사용할거다

@GetMapping("/gallery_view.do")
public String gallery_view(
	Model m, @RequestParam(defaultValue="0", required = false) Integer gidx
    ) throws Exception{
    
    //@RequestParam~ : 값 필수인지 여부 정해주는 부분		
    this.m_gidx = gidx; //메모리영역의 전역 변수에 인자값으로 받은 gidx값 넣어줌 
    
    ArrayList<Object> one_list = new gallery_select().one_list(dbInfo);
    m.addAttribute("one_list" , one_list);
    
    return null;
}

 

- gallery_select.java 에 추가 (Module)

-  shop_main2.java 에서 호출하는 모듈 / Controller에 있는 static 변수형을 활용하여 select 함 

package shop;

//~import

public class gallery_select{
	Connection con = null;
	PreparedStatement ps = null;
	ResultSet rs = null;
	ArrayList<ArrayList<Object>> all = null;
    
	//shop_main2 sm = new shop_main2(); //Controller의 class load
	shop_main2 sm; //이렇게 로드해도 됨 - Spring의 강점!
	gallery_dao gd = new gallery_dao(); //dao 로드 = dao는 new까지 다 적어줘야함
    
	public ArrayList<Object> one_list(BasicDataSource dbinfo) throws Exception{
		try {
			this.con = dbinfo.getConnection();
			//order by : 맨 마지막부터 읽어들이기 시작함 -> 속도 더 빠름
			String sql = "select * from gallery where gidx=? order by gidx desc";
			this.ps = this.con.prepareStatement(sql);
			this.ps.setString(1, String.valueOf(this.sm.m_gidx));
			this.rs = this.ps.executeQuery();
			this.rs.next();
			
			this.gd.setGidx(Integer.parseInt(this.rs.getString(1)));
			this.gd.setGwriter(this.rs.getString(2));
			this.gd.setGsubject(this.rs.getString(3));
			this.gd.setGtext(this.rs.getString(4));
			this.gd.setGorifile(this.rs.getString(5));
			this.gd.setGfile(this.rs.getString(6));
			this.gd.setGindate(this.rs.getString(7));
			
		}catch(Exception e) {
			System.out.println("ERROR");
		}finally {			
			this.rs.close();
			this.ps.close();
			this.con.close();
		}
		
		return this.gd.views(); //dao에서 만들어진 배열 출력
	}
	
	
}

 

 

- gallery_view.jsp 생성 (View)

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="gw" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>갤러리 게시판 상세보기</title>
</head>
<body>
	글쓴이 : ${one_list.get(1)} <br>
	제목 : ${one_list.get(2)}<br>
	내용 : ${one_list.get(3)}<br><br>
	<gw:set var="imgs" value="${fn:split(one_list.get(4),',')}"></gw:set>
	<gw:set var="imgs2" value="${fn:split(one_list.get(5),',')}"></gw:set>
	
	<gw:set var="ea" value="${fn:length(imgs)}"></gw:set>
	
	
	<gw:if test="${one_list.get(4)!=null}">
		1. 첨부파일 : orifile만 노출할 경우<br>
		<gw:forEach var="no" items="${imgs}">
		${no}<br>
		</gw:forEach> 
		
		<br><br><br>
		
		2. 첨부파일_ver2 
		: orifile명,저장되어있는file명 둘다 필요한 경우 
		foreach속 forEach 돌리면 안돼서 반복문(begin,end) 사용<br>
		<gw:forEach var="no2" begin="0" end="${ea-1}">
		<a href="./upload/${imgs2[no2]}" target="blank">${imgs[no2]}</a><br>
		</gw:forEach>
	</gw:if>
	
	<br>
	<input type="button" value="게시물 삭제" onclick="del_gallery()">
</body>

<script>
	//javascript 변수에는 jtl,jsp 변수를 모두 받을 수 있음
	function del_gallery(gidx){
		if(confirm("해당게시물을 삭제시 복구되지 안습니다. 정말 삭제할까요?")){
			location.href='./gallery_delete.do?gidx='+${one_list.get(0)};
		}
	}
</script>

</html>

⭐ class 배열에서 fn:split 사용시 원시배열 []로 바뀌어서 출력된다!! 

⭐ 사용자가 업로드한 파일명도 유지하면서 개발자가 변경한 파일명으로 출력을 할경우
     => forEach에 item을 사용하기 어렵다

 

요렇게 출력

 

=> delete 로 갈꺼임