본문 바로가기
개발 공부 Today I Learned

[국비 69일차 TIL] 관리자 페이지 게시글 관리

by 개발자신입 2024. 3. 4.
반응형

2024-03-04 안드로이드 앱 프로그래밍 

 

메뉴바 활용 방법 (sidebar.jsp)

  • active
  • folder
  • collapse

  • active 활용 시, 내가 클릭한 부분, 위치가 강조됨.
    <li class="nav-item active">

관리자 페이지 - 게시글관리


AdminService.java (인터페이스)

AdminServiceImpl (클래스) 

superclass=AbstractDAO Interfaces=AdminService 선택 후 생성

 

 

board.jsp 생성

sidebar(menu)를 wrapper아래에 두기.

<body id="page-top">
	
    <!-- Page Wrapper -->
    <div id="wrapper">
	<c:import url="sidebar.jsp" />

 

AdminController.java

리퀘스트매핑 추가 : @RequestMapping("/admin")

@Resource 추가

@Controller
@RequestMapping("/admin")
public class AdminController {

	@Resource(name="adminService")
	private AdminService adminService;

board 메소드

	@GetMapping("/admin/board")
	public String board(Model model) {
		List<BoardDTO> list = adminService.boardList();
		model.addAttribute("list", list);
		return "/admin/board";
	}

 

-> boardList() 생성 : 서비스, 서비스Impl, DAO

AdminService.java

@Service
public interface AdminService {

	List<BoardDTO> boardList();
}

AdminServiceImpl.java

AdminServiceImpl에 오류 잡아주기 = add ~ @Override

@Service("adminService")
public class AdminServiceImpl extends AbstractDAO implements AdminService {

	@Override
	public List<BoardDTO> boardList() {
		return null;
	}
}

AdminDAO 생성

@Repository
public class AdminDAO extends AbstractDAO {

	@Autowired
	private SqlSession sqlSession;
}

AdminServiceImpl.java

@Service("adminService")
public class AdminServiceImpl extends AbstractDAO implements AdminService {

	@Autowired
	private AdminDAO adminDAO;
	
	@Override
	public List<BoardDTO> boardList() {
		return adminDAO.boardList();
	}
}

-> boardList()를 AdminDAO에 생성

 AdminDAO.java

@Repository
public class AdminDAO extends AbstractDAO {

	@Autowired
	private SqlSession sqlSession;

	public List<BoardDTO> boardList() {
		return sqlSession.selectList("admin.boardList");
	}
}

admin-mapper.xml

<mapper namespace="admin">
	
	<select id="boardList" resultType="boardDTO">
		SELECT board_no, board_title, mno, board_date, board_ip, board_del 
		FROM board
	</select>

</mapper>

AdminController.java 

	// 2024-03-04 
	@GetMapping("/board")
	public String board(@RequestParam("pageNo") String pageNo, Model model) {
		// 페이징 + 검색 + 한 화면에 보이는 게시글 수 변경
		
		// 전체 글 수
		int totalRecordCount = adminService.totalRecordCount();
		
		List<BoardDTO> list = adminService.boardList();
		model.addAttribute("list", list);
		return "/admin/board";
	}

 

-> totalRecordCount 생성

AdminService.java

int totalRecordCount();

AdminServiceImpl.java

AdminServiceImpl 빨간줄 오류나는거 잡아주기 : 생성해주기 @Override

	@Override
	public int totalRecordCount() {
		return adminDAO.totalRecordCount();
	}

AdminDAO.java

	public int totalRecordCount() {
		return sqlSession.selectOne("admin.totalRecordCount");
	}

admin-mapper.xml

	<select id="totalRecordCount" resultType="Integer">
		SELECT COUNT(*) 
		FROM board
	</select>

board.jsp

화면에 게시판 글 띄우기 

board_del은 BoardDTO int에 추가하기

<body id="page-top">

	<!-- Page Wrapper -->
	<div id="wrapper">
		<c:import url="sidebar.jsp" />

		<!-- Content Wrapper -->
		<div id="content-wrapper" class="d-flex flex-column">

			<!-- Main Content -->
			<div id="content">

				<!-- Begin Page Content -->
				<div class="container-fluid">

					<!-- Page Heading -->
					<h1 class="h3 mb-4 text-gray-800">Blank Page</h1>

					<table class="table table-hover">
						<thead>
							<tr>
								<th>번호</th>
								<th>제목</th>
								<th>작성자</th>
								<th>작성일</th>
								<th>조회수</th>
							</tr>
						</thead>
						<tbody>
							<c:forEach items="${list }" var="row">
								<tr>
									<td onclick="detail(${row.board_no })">${row.board_no }</td>
									<td class="title"><a href="./detail?no=${row.board_no }"> ${row.board_title } <c:if test="${row.comment gt 0}">
												<span class="badge">${row.comment }</span>
											</c:if>
									</a></td>
									<td>${row.mname }</td>
									<td>${row.board_date }</td>
									<td>${row.board_count }</td>
									<td>${row.board_del }</td>
								</tr>
							</c:forEach>
						</tbody>
					</table>

AdminController.java

전자정부 페이징 코드추가

	@GetMapping("/board")
	public String board(@RequestParam("pageNo") String pageNo, Model model) {
		// 페이징 + 검색 + 한 화면에 보이는 게시글 수 변경
		
		// 전체 글 수
		int totalRecordCount = adminService.totalRecordCount();
		
		// 전자정부 페이징
		PaginationInfo paginationInfo = new PaginationInfo();
		paginationInfo.setCurrentPageNo(util.str2Int(pageNo)); // 현재 페이지 번호: util 써서 int타입으로
		paginationInfo.setRecordCountPerPage(10); // 한 페이지에 게시되는 게시물 수 
		paginationInfo.setPageSize(10); // 페이징 리스트의 사이즈 (페이징 숫자 수)
		paginationInfo.setTotalRecordCount(totalRecordCount); // 전체 게시물 건 수

		SearchDTO searchDTO = new SearchDTO();
		searchDTO.setPageNo(paginationInfo.getFirstRecordIndex());		 
		
		List<BoardDTO> list = adminService.boardList(searchDTO); // 파라미터 추가 
		model.addAttribute("list", list);
		return "/admin/board";
	}

-> 파라미터 추가 (서비스, 서비스impl, DAO)

AdminService.java

boardList(SearchDTO searchDTO);

@Service
public interface AdminService {

	List<BoardDTO> boardList(SearchDTO searchDTO);

	int totalRecordCount();
}

AdminServiceImpl.java

@Service("adminService")
public class AdminServiceImpl extends AbstractDAO implements AdminService {

	@Autowired
	private AdminDAO adminDAO;
	
	@Override
	public List<BoardDTO> boardList(SearchDTO searchDTO) {
		return adminDAO.boardList(searchDTO);
	}

AdminDAO

	public List<BoardDTO> boardList(SearchDTO searchDTO) {
		return sqlSession.selectList("admin.boardList", searchDTO);
	}

mybatis-config.xml

alias="search"였는데 "searchDTO"로 변경

이전의 search를 전부 다 바꿔줘야함.. 아 왜 도대체 !!!!

<typeAlias type="org.-----.dto.SearchDTO" alias="searchDTO"/>

 

-> board-mapper.xml도 바꿔주기

 

admin-mapper.xml

파라미터타입 searchDTO 추가, limit에 #{pageNo} 받아오기

	<select id="boardList" parameterType="searchDTO" resultType="boardDTO">
		SELECT board_no, board_title, mno, board_date, board_ip, board_del 
		FROM board
		ORDER BY board_no DESC
		LIMIT #{pageNo}, 10;
	</select>

AdminController.java

@RequestParam(name="pageNo",defaultValue = "1") 추가

model.addAttribute("paginationInfo", paginationInfo); 추가

	// 2024-03-04 
	@GetMapping("/board")
	public String board(@RequestParam(name="pageNo",defaultValue = "1") String pageNo, Model model) {
		// 페이징 + 검색 + 한 화면에 보이는 게시글 수 변경
		
		// 전체 글 수
		int totalRecordCount = adminService.totalRecordCount();
		
		// 전자정부 페이징
		PaginationInfo paginationInfo = new PaginationInfo();
		paginationInfo.setCurrentPageNo(util.str2Int(pageNo)); // 현재 페이지 번호: util 써서 int타입으로
		paginationInfo.setRecordCountPerPage(10); // 한 페이지에 게시되는 게시물 수 
		paginationInfo.setPageSize(10); // 페이징 리스트의 사이즈 (페이징 숫자 수)
		paginationInfo.setTotalRecordCount(totalRecordCount); // 전체 게시물 건 수
		
		SearchDTO searchDTO = new SearchDTO();
		searchDTO.setPageNo(paginationInfo.getFirstRecordIndex());
		
		List<BoardDTO> list = adminService.boardList(searchDTO); // 파라미터 추가 
		model.addAttribute("list", list);
		return "/admin/board";
	}

board.jsp

<%@ taglib uri="http://egovframework.gov/ctl/ui" prefix="ui"%>


					<!-- 페이징 -->
					<div class="m-2" style="text-align: center;">
						<ui:pagination paginationInfo="${paginationInfo }" type="text" jsFunction="linkPage"/>
					</div>

 

<head>에 function 추가

<jsp:include page="topbar.jsp"/>

<script type="text/javascript">
	function linkPage(pageNo){
		location.href="./board?pageNo="+pageNo;
	}
</script>

 

이어서, 한 페이지 보이는 글 개수 옵션

					<!-- Page Heading -->
					<h1 class="h3 mb-4 text-gray-800">게시판 관리</h1>
					
					<div class="">
						<select name="perPage" id="perPage" class="form-control">
							<option value="1">10</option>
							<option value="2">20</option>
							<option value="3">30</option>
							<option value="4">40</option>
							<option value="5">50</option>
							<option value="10">100</option>
						</select>
					</div>

 

jQuery 추가

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js" integrity="sha512-v2CJ7UaYy4JwqLDIrZUI/4hqeoQieOmAZNXBeQyjo21dadnwR+8ZaIJVT8EE2iyI61OV8e6M8PP2/4hpQINQ/g==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>




	$(function(){
		// alert("사용가능"); 
		location.href="./board?pageNo=${pageNo }&perPage="+$('#perPage').val();
			// ${pageNo } 임시로 적어놓음. 컨트롤러에서 보내주는게 편함.
			// 게시판에서 20을 누르면 url 끝에 2라고 뜨고, 30을 누르면 3이라고 떠야함.  (아래에서 잡아준 val)
		});
	});

AdminController.java

perPage 추가

	@GetMapping("/board")
	public String board(@RequestParam(name="pageNo",defaultValue = "1") String pageNo, 
					@RequestParam(name="perPage",defaultValue = "1", required = false) String perPage, 
					Model model) {
	
	// 전자정부 페이징 perPage 변경
	paginationInfo.setRecordCountPerPage(util.str2Int(perPage) * 10);

SearchDTO.java

recordCountPerPage 추가하기 -> 컨트롤러에서 추가하기

@Data
public class SearchDTO {
	private int pageNo, recordCountPerPage;
	private String search;
}

AdminController

DTO에서 추가해준 RecordCountPerPage

		SearchDTO searchDTO = new SearchDTO();
		searchDTO.setPageNo(paginationInfo.getFirstRecordIndex());
		searchDTO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());

admin-mapper.xml

페이지 보여주는 개수 #{recordCountPerPage} 변경

	<select id="boardList" parameterType="searchDTO" resultType="boardDTO">
		SELECT board_no, board_title, mno, board_date, board_ip, board_del 
		FROM board
		ORDER BY board_no DESC
		LIMIT #{pageNo}, #{recordCountPerPage};
	</select>

 

* 검색창 넣어주기

					<div class="m-2 row">
						<select name="perPage" id="perPage" class="form-control col-2">
							<option value="1">10</option>
							<option value="2">20</option>
							<option value="3">30</option>
							<option value="4">40</option>
							<option value="5">50</option>
							<option value="10">100</option>
						</select>
						<div class="input-group col-6">
							<input type="text" name="search" id="search" class="form-control">
							<button type="button" class="btn btn-secondary" id="searchBtn">검색</button>
						</div>
						<button class="btn btn-dark col-4">초기화</button>
					</div>

 

-> 검색 버튼 누르면 작동하도록 #searchBtn

	$(function(){
		$('#perPage').change(function(){
			location.href="./board?pageNo=${pageNo}&perPage="+$('#perPage').val(); 
			// ${pageNo } 임시로 적어놓음. 컨트롤러에서 보내주는게 편함.
			// 게시판에서 20을 누르면 url 끝에 2라고 뜨고, 30을 누르면 3이라고 떠야함. (아래에서 잡아준 val)
		});
		$('#searchBtn').click(function(){
			location.href="./board?pageNo=${pageNo}&perPage=${perPage}&search="+$('#search').val();
		})
	});
</script>

AdminController.java

search 관련 코드 추가

	@GetMapping("/board")
	public String board(@RequestParam(name="pageNo", defaultValue = "1") String pageNo, 
					@RequestParam(name="perPage", defaultValue = "1", required = false) String perPage,
					@RequestParam(name="search", required = false) String search,
					Model model) {

		// 전체 글 수
		int totalRecordCount = adminService.totalRecordCount(search); // search 추가

 

-> totalRecordCount (add parameter로 서비스, 서비스impl, DAO에 추가)

AdminService.java

int totalRecordCount(String search);

AdminServiceImpl.java

	@Override
	public int totalRecordCount(String search) {
		return adminDAO.totalRecordCount(search);
	}

AdminDAO

	public int totalRecordCount(String search) {
		return sqlSession.selectOne("admin.totalRecordCount", search);
	}

admin-mapper.xml

search 파라미터타입 String

	<select id="totalRecordCount" parameterType="String" resultType="Integer">
		SELECT COUNT(*) 
		FROM board
		<where> 
			<if test="search != null">
				board_title LIKE CONCAT('%',#{search},'%')
		        OR board_content LIKE CONCAT('%', #{search}, '%')
			</if>
		</where>
	</select>

AdminController.java

searchDTO.setSearch(search); // 검색된 내용만 화면에 나오도록 추가

pageNo, perPage를 model로 추가

		SearchDTO searchDTO = new SearchDTO();
		searchDTO.setPageNo(paginationInfo.getFirstRecordIndex());
		searchDTO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
		searchDTO.setSearch(search); 

		List<BoardDTO> list = adminService.boardList(searchDTO); // 파라미터 추가 
		model.addAttribute("list", list);
		model.addAttribute("paginationInfo", paginationInfo);
		model.addAttribute("pageNo", pageNo);
		model.addAttribute("perPage", perPage);

admin-mapper.xml

search의 <where> 아까랑 똑같이 추가

	<select id="boardList" parameterType="searchDTO" resultType="boardDTO">
		SELECT board_no, board_title, mno, board_date, board_ip, board_del 
		FROM board
		<where>
			<if test="search != null">
				board_title LIKE CONCAT('%',#{search},'%')
		        OR board_content LIKE CONCAT('%', #{search}, '%')			
			</if>		
		</where>
		ORDER BY board_no DESC
		LIMIT #{pageNo}, #{recordCountPerPage};
	</select>

board.jsp

linkPage#perPage change에 perPage, search 추가

<script type="text/javascript">
	function linkPage(pageNo){
		location.href="./board?pageNo="+pageNo+"&perPage=${perPage}&search=${search}";
	}
	
	$(function(){
		$('#perPage').change(function(){
			location.href="./board?pageNo=${pageNo}&perPage="+$('#perPage').val()+&search=${search}; 
		});
		$('#searchBtn').click(function(){
			location.href="./board?pageNo=${pageNo}&perPage=${perPage}&search="+$('#search').val();
		})
	});
</script>

 

* input value에 search 추가

<input type="text" name="search" id="search" class="form-control" value="${search }">

 

* 검색 select option 추가하기

						<div class="input-group col-6">
							<select name="searchTitle" id="searchTitle" class="form-control col-3">
								<option value="1">제목 검색</option>
								<option value="2">본문 검색</option>
								<option value="3">작성자 검색</option>
							</select>
							<input type="text" name="search" id="search" class="form-control" value="${search }">
							<button type="button" class="btn btn-secondary" id="searchBtn">검색</button>
						</div>
						<button class="btn btn-dark col-4">초기화</button>
					</div>

 

* perPage에 selected 추가하기

			<select name="perPage" id="perPage" class="form-control col-2">
				<option value="1" <c:if test="${perPage eq 1 }">selected="selected"</c:if> > 10개씩 보기</option>
				<option value="2" <c:if test="${perPage eq 2 }">selected="selected"</c:if> > 20개씩 보기</option>
				<option value="3" <c:if test="${perPage eq 3 }">selected="selected"</c:if> > 30개씩 보기</option>
				<option value="4" <c:if test="${perPage eq 4 }">selected="selected"</c:if> > 40개씩 보기</option>
				<option value="5" <c:if test="${perPage eq 5 }">selected="selected"</c:if> > 50개씩 보기</option>
				<option value="10" <c:if test="${perPage eq 10 }">selected="selected"</c:if> > 100개씩 보기</option>
			</select>

 

클릭 function에 searchTitle="+$('#searchTitle').val()+" 추가

		 $('#searchBtn').click(function () {
	            location.href = "./board?pageNo=${pageNo}&perPage=${perPage}&searchTitle&search=" + $('#search').val();
		})

db-context.xml

ref="dataSourceSpied" 변경

	<bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSourceSpied"/>
		<property name="mapperLocations" value="classpath:/mybatis/mappers/*-mapper.xml"/>
		<property name="configLocation" value="classpath:/mybatis/config/mybatis-config.xml"/>
	</bean>

AdminController.java

@getmapping에 searchTitle 추가

@RequestParam(name="searchTitle", required = false) String searchTitle,

SearchDTO

searchTitle 추가

@Data
public class SearchDTO {
	private int pageNo, recordCountPerPage;
	private String search, searchTitle;
}

AdminController.java

searchTitle 추가

searchDTO.setSearchTitle(searchTitle);

admin-mapper.xml

select문에 JOIN

<where>에는 제목, 본문, 작성자 검색 관련

	<select id="boardList" parameterType="searchDTO" resultType="boardDTO">
		SELECT b.board_no, b.board_title, m.mname, m.mid, b.board_date, b.board_ip, b.board_del 
		FROM board b JOIN member m ON b.mno=m.mno
		<where>
			<if test="searchTitle == 1">
				b.board_title LIKE CONCAT('%',#{search},'%')
			</if>
			<if test="searchTitle == 2">
				b.board_content LIKE CONCAT('%', #{search}, '%')
			</if>	
			<if test="searchTitle == 3"> <!-- 작성자 -->
				m.mname LIKE CONCAT('%', #{search}, '%')
			</if>	
		</where>
		ORDER BY b.board_no DESC
		LIMIT #{pageNo}, #{recordCountPerPage};
	</select>

AdminController.java

* searchDTO 위치 변경 (페이징 코드 기준으로)

- search, searchTitle 위로

- pageNo, perPage 아래로

* totalRecordCount 변수 변경 -> 서비스, 서비스Impl, DAO 모두 변경해줘야 함.

* model에 searchTitle, search 추가해주기.

	@GetMapping("/board")
	public String board(@RequestParam(name="pageNo", defaultValue = "1") String pageNo, 
						@RequestParam(name="perPage", defaultValue = "1", required = false) String perPage,
						@RequestParam(name="search", required = false) String search,
						@RequestParam(name="searchTitle", required = false) String searchTitle,
						Model model) {
		// 페이징 + 검색 + 한 화면에 보이는 게시글 수 변경
		
		// 전체 글 수에도 DTO 보내기
		SearchDTO searchDTO = new SearchDTO();
		searchDTO.setSearch(search); // 검색된 내용만 화면에 나오도록
		searchDTO.setSearchTitle(searchTitle);
		
		// 전체 글 수 (변수 searchDTO로 변경, 인터페이스 메소드 변경 change method 선택)
		int totalRecordCount = adminService.totalRecordCount(searchDTO); 
		
		// 전자정부 페이징
		PaginationInfo paginationInfo = new PaginationInfo();
		paginationInfo.setCurrentPageNo(util.str2Int(pageNo)); // 현재 페이지 번호: util 써서 int타입으로
		paginationInfo.setRecordCountPerPage(util.str2Int(perPage) * 10); // 한 페이지에 게시되는 게시물 수 
		paginationInfo.setPageSize(10); // 페이징 리스트의 사이즈 (페이징 숫자 수)
		paginationInfo.setTotalRecordCount(totalRecordCount); // 전체 게시물 건 수
		
		searchDTO.setPageNo(paginationInfo.getFirstRecordIndex());
		searchDTO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
		
		List<BoardDTO> list = adminService.boardList(searchDTO); // 파라미터 추가 
		model.addAttribute("list", list);
		model.addAttribute("paginationInfo", paginationInfo);
		model.addAttribute("pageNo", pageNo);
		model.addAttribute("perPage", perPage);
		model.addAttribute("searchTitle", searchTitle);
		model.addAttribute("search", search);
		
		return "/admin/board";
	}

AdminService.java

int totalRecordCount(SearchDTO searchDTO); 변경됨

@Service
public interface AdminService {

	List<BoardDTO> boardList(SearchDTO searchDTO);

	int totalRecordCount(SearchDTO searchDTO);

}

AdminServiceImpl

	@Override
	public int totalRecordCount(SearchDTO searchDTO) {
		return adminDAO.totalRecordCount(searchDTO);
	}

AdminDAO

	public int totalRecordCount(SearchDTO searchDTO) {
		return sqlSession.selectOne("admin.totalRecordCount", searchDTO);
	}

admin-mapper.xml

파라미터타입 변경 searchDTO

JOIN 후, 검색관련 코드 추가

	<select id="totalRecordCount" parameterType="searchDTO" resultType="Integer">
		SELECT COUNT(*) 
		FROM board b JOIN member m ON b.mno=m.mno
		<where>
			<if test="searchTitle == 1">
				b.board_title LIKE CONCAT('%',#{search},'%')
			</if>
			<if test="searchTitle == 2">
				b.board_content LIKE CONCAT('%', #{search}, '%')
			</if>	
			<if test="searchTitle == 3">
				m.mname LIKE CONCAT('%', #{search}, '%')
			</if>	
		</where>
	</select>

board.jsp

			<select name="searchTitle" id="searchTitle" class="form-control col-3">
				<option value="1" <c:if test="${searchTitle eq 1 }">selected="selected"</c:if>>>제목 검색</option>
				<option value="2" <c:if test="${searchTitle eq 2 }">selected="selected"</c:if>>>본문 검색</option>
				<option value="3" <c:if test="${searchTitle eq 3 }">selected="selected"</c:if>>>작성자 검색</option>
			</select>

 

* 초기화 버튼 id 추가

<button type="button" id="reset" class="btn btn-dark col-4">초기화</button>

 

* reset 클릭 기능 만들기

		 $('#reset').click(function(){
			location.href="./board"; 
		 });

 

* 삭제된 글이면 0 = 안보임

* onclick="postDel(${row.board_no })" 

postDel을 동시에 사용하면서 .....

				<c:choose>
					<c:when test="${row.board_del eq 1}">
						<i class="fa fa-eye" aria-hidden="true" onclick="postDel(${row.board_no })"></i>
					</c:when>
					<c:otherwise>
						<i class="fa fa-eye-slash" aria-hidden="true"  onclick="postDel(${row.board_no })"></i>
					</c:otherwise>
				</c:choose>

 

* 글 리스트에서 아이콘 눌러서 삭제하기

function postDel(no){
		location.href="./postDel?no="+no;
	}

AdminController.java

	@GetMapping("/postDel")
	public String postDel(@RequestParam("no") int no) {
		int result = adminService.postDel(no);
		return "redirect:/admin/board";
	}

 

-> postDel 생성 (서비스, 서비스Impl, DAO)

AdminService.java

int postDel(int no);

AdminServiceImpl.java

AdminServiceImpl에 오류난거 잡아주기 = add @Override

	@Override
	public int postDel(int no) {
		return adminDAO.postDel(no);
	}

AdminDAO

실제로 삭제하는게 아니기 때문에 삭제=업데이트

	public int postDel(int no) {
		return sqlSession.update("admin.postDel", no);
	}

admin-mapper.xml

	<update id="postDel" parameterType="int">
		UPDATE board SET board_del='0' 
		WHERE board_no=#{no} 
	</update>

 

* 글 삭제 눈 아이콘 (보이게/안보이게)의 id를 postDel로 동시에 쓸 수 있도록 sql문 작성

   <update id="postDel" parameterType="Integer">
      Update board SET board_del= CASE WHEN board_del='0' THEN '1'
      ELSE '0' END WHERE board_no=#{no}
   </update>

board.jsp

				<table class="table table-hover">
					<thead>
						<tr class="row">
							<th class="col-1 text-center">번호</th>
							<th class="col-4 text-center">제목</th>
							<th class="col-2 text-center">글쓴이</th>
							<th class="col-3 text-center">날짜</th>
							<th class="col-1 text-center">읽음</th>
							<th class="col-1 text-center">보기</th>
						</tr>
					</thead>
					<tbody>
						<c:forEach items="${list }" var="row">
							<tr class="row<c:if test="${row.board_del eq 0}"> bg-dark</c:if>">
								<td class="col-1 text-center">${row.board_no }</td>
								<td class="col-4">${row.board_title }</td>
								<td class="col-2"><a href="./board?searchTitle=3&search=${row.mname }">${row.mname }</a></td>
								<td class="col-3 text-center">${row.board_date }</td>
								<td class="col-1 text-center">${row.board_count }</td>
								<td class="col-1 text-center">
								<c:choose>
									<c:when test="${row.board_del eq 1 }">
										<i class="fa fa-eye" aria-hidden="true" onclick="postDel(${row.board_no })"></i>
									</c:when>
									<c:otherwise>
										<i class="fa fa-eye-slash" aria-hidden="true" onclick="postDel(${row.board_no })"></i>
									</c:otherwise>
								</c:choose>
								</td>
							</tr>
						</c:forEach>
					</tbody>
				</table>

 

반응형

댓글