반응형
프로젝트 진행 중 내 블로그에 기록하면 좋을 것 같아 오늘부터 기록하기로 했다.
엉망이라 이 게시글을 보시는 분들은 꼭 참고용으로만 보시길 ...
개발환경
- IDE - Eclipse IDE for Enterprise Java and Web Developers (2020-09 Window 64bit)
- Java - JDK 15.0.2
- Tomcat - Apache Tomcat 9.0.45
-faqList.jsp
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" isELIgnored="false"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<c:set var="contextPath" value="${pageContext.request.contextPath}" />
<%
request.setCharacterEncoding("UTF-8");
%>
<html>
<head>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">
<link rel="stylesheet" href="${contextPath}/resources/css/board.css">
<link rel="stylesheet" href="${contextPath}/resources/css/faq.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script>
<meta charset="utf-8">
<title>자주 묻는 질문 목록</title>
<script type="text/javascript">
$('div.title').hide();
$("div.content").click(function() {
$(this).next().slideToggle(1000);
});
</script>
<style>
.title:hover{
cursor: pointer;
}
.content {
display: none;
}
</style>
</head>
<body>
<div class="container">
<div>
<h3 class="mb-3">자주 묻는 질문</h3>
<c:choose>
<c:when test="${manager == 1}">
<a href="${contextPath }/board/faqWrite.do">
<button class="btn btn-outline-dark" style="float: right;margin-bottom: 20px;">FaQ 등록</button>
</a>
</c:when>
<c:otherwise>
<a href="#">
<button class="btn btn-outline-dark" style="float: right;margin-bottom: 20px;margin-left: 10;">1:1 문의내역</button>
</a>
<a href="${contextPath }/board/qnaWrite.do">
<button class="btn btn-outline-dark" style="float: right;margin-bottom: 20px;">1:1 문의하기</button>
</a>
</c:otherwise>
</c:choose>
<div style="margin-top: 100;">
<c:forEach items="${faqList}" var="faqVO">
<input type="radio" name="accordion" id="answer${faqVO.faq_no}">
<label for ="answer${faqVO.faq_no}">
${faqVO.faq_title}
<i class="fas fa angle-down"></i>
</label>
<div>
<p style="text-align: left;">${faqVO.faq_content}</p>
</div>
</c:forEach>
</div>
</div>
</div>
</body>
</html>
-faqVO
package com.myspring.petshop.board.faq.vo;
import java.sql.Timestamp;
import org.springframework.stereotype.Component;
@Component("faqVO")
public class FaqVO {
private int faq_no; // 글 번호(pk, autoIncrement)
private String faq_title; // 제목
private String faq_writer; // 작성자
private String faq_content; // 내용
private Timestamp faq_date; // 작성 날짜
private int faq_hits; // 조회수 (게시글 형태로 보여주다 upDown 형태로 보여주게 되어 사실상 쓰지 않음)
public FaqVO() {
}
public int getFaq_no() {
return faq_no;
}
public String getFaq_title() {
return faq_title;
}
public String getFaq_writer() {
return faq_writer;
}
public String getFaq_content() {
return faq_content;
}
public Timestamp getFaq_date() {
return faq_date;
}
public int getFaq_hits() {
return faq_hits;
}
public void setFaq_no(int faq_no) {
this.faq_no = faq_no;
}
public void setFaq_title(String faq_title) {
this.faq_title = faq_title;
}
public void setFaq_writer(String faq_writer) {
this.faq_writer = faq_writer;
}
public void setFaq_content(String faq_content) {
this.faq_content = faq_content;
}
public void setFaq_date(Timestamp faq_date) {
this.faq_date = faq_date;
}
public void setFaq_hits(int faq_hits) {
this.faq_hits = faq_hits;
}
}
-faqController
package com.myspring.petshop.board.faq.controller;
import java.util.List;
import java.util.Locale;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
import com.myspring.petshop.board.event.controller.EventController;
import com.myspring.petshop.board.event.controller.EventControllerImpl;
import com.myspring.petshop.board.event.service.EventService;
import com.myspring.petshop.board.event.vo.EventVO;
import com.myspring.petshop.board.faq.service.FaqService;
import com.myspring.petshop.board.faq.vo.FaqVO;
import com.myspring.petshop.member.vo.MemberVO;
@Controller("faqController")
@EnableAspectJAutoProxy
public class FaqControllerImpl implements FaqController {
@Autowired
private FaqService faqService;
@Autowired
private MemberVO memberVO;
@Autowired
private HttpSession session;
private static final Logger logger = LoggerFactory.getLogger(EventControllerImpl.class);
//FAQ List 조회
@Override
@RequestMapping(value = "/board/faqList.do", method = {RequestMethod.GET, RequestMethod.POST})
public ModelAndView faqList(HttpServletRequest request, HttpServletResponse response) throws Exception {
session = request.getSession();
memberVO = (MemberVO)session.getAttribute("member");
int manager;
if(memberVO != null) {
manager = memberVO.getMember_manager();
}
else {
manager = 1234;
}
List faqList=faqService.listFaq();
ModelAndView mav = new ModelAndView("/board/faqList");
mav.addObject("faqList", faqList);
mav.addObject("manager", manager);
return mav;
}
// FAQ 작성 폼
@RequestMapping(value = "/board/faqWrite.do", method = RequestMethod.GET)
public String faqWrite(Locale locale, Model model) {
return "/board/faqWrite";
}
// FAQ 작성 기능
@Override
@RequestMapping(value="/faqWrite.do", method=RequestMethod.POST)
public ModelAndView faqWrite(@ModelAttribute("faq")FaqVO faqVO, HttpServletRequest request,
HttpServletResponse response)throws Exception {
request.setCharacterEncoding("utf-8");
int result=0;
result = faqService.faqWrite(faqVO);
ModelAndView mav = new ModelAndView("redirect:/board/faqList.do");
return mav;
}
// FAQ 수정 (기존 값 불러오기)
@Override
@RequestMapping(value="/board/faqMod.do", method=RequestMethod.POST)
public ModelAndView faqMod(@RequestParam("faq_no") int faq_no,
HttpServletRequest request, HttpServletResponse response) throws Exception {
request.setCharacterEncoding("utf-8");
FaqVO faqVO = faqService.faqMod(faq_no);
ModelAndView mav = new ModelAndView("faqMod");
mav.addObject("faqVO", faqVO);
return mav;
}
// FAQ 수정 기능
@Override
@RequestMapping(value="/faqMod.do", method=RequestMethod.POST)
public ModelAndView faqModify(@ModelAttribute("faq_no") FaqVO faqVO,
HttpServletRequest request, HttpServletResponse response) throws Exception {
faqVO.getFaq_no();
faqService.faqModify(faqVO);
ModelAndView mav = new ModelAndView("redirect:/board/faqList.do");
return mav;
}
// FAQ 삭제 기능
@Override
@RequestMapping(value="/board/faqRemove.do", method= RequestMethod.POST)
public ModelAndView faqRemove(@RequestParam("faq_no") int faq_no,
HttpServletRequest request, HttpServletResponse response) throws Exception {
faqService.faqRemove(faq_no);
ModelAndView mav = new ModelAndView("redirect:/board/faqList.do");
return mav;
}
}
- faqService
package com.myspring.petshop.board.faq.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.stereotype.Service;
import com.myspring.petshop.board.event.vo.EventVO;
import com.myspring.petshop.board.faq.dao.FaqDAO;
import com.myspring.petshop.board.faq.vo.FaqVO;
@Service("faqService")
public class FaqServiceImpl implements FaqService{
@Autowired
private FaqDAO faqDAO;
@Override
public List listFaq() throws DataAccessException{
List faqList = null;
faqList = faqDAO.selectAllFaqList();
return faqList;
}
@Override
public int faqWrite(FaqVO faqVO) throws DataAccessException {
return faqDAO.faqWrite(faqVO);
}
@Override
public int faqRemove(int faq_no) throws DataAccessException {
return faqDAO.faqDelete(faq_no);
}
@Override
public FaqVO faqMod(int faq_no) throws DataAccessException {
FaqVO faqVO = faqDAO.faqSelect(faq_no);
return faqVO;
}
@Override
public int faqModify(FaqVO faqVO) throws DataAccessException {
return faqDAO.faqUpdate(faqVO);
}
}
- faqDAO
package com.myspring.petshop.board.faq.dao;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.stereotype.Repository;
import com.myspring.petshop.board.event.vo.EventVO;
import com.myspring.petshop.board.faq.vo.FaqVO;
@Repository("faqDAO")
public class FaqDAOImpl implements FaqDAO{
@Autowired
private SqlSession sqlSession;
@Override
public List selectAllFaqList() throws DataAccessException{
List<FaqVO> faqList = null;
faqList = sqlSession.selectList("mapper.board.selectAllFaqList");
return faqList;
}
@Override
public int faqWrite(FaqVO faqVO) throws DataAccessException {
return sqlSession.insert("mapper.board.faqInsert", faqVO);
}
@Override
public FaqVO faqSelect(int faq_no) throws DataAccessException {
return sqlSession.selectOne("mapper.board.faqSelect", faq_no);
}
@Override
public int faqDelete(int faq_no) throws DataAccessException {
int result=sqlSession.delete("mapper.board.faqDelete", faq_no);
return result;
}
@Override
public int faqUpdate(FaqVO faqVO) throws DataAccessException {
int result = sqlSession.update("mapper.board.faqUpdate", faqVO);
return result;
}
}
결과 화면
반응형
'spring' 카테고리의 다른 글
[Spring] JSP 한글이 깨져요 한글 깨짐 현상 인코딩 바꾸는 법 (0) | 2023.04.21 |
---|---|
[GRADLE] 스프링부트 gradle jsp 수정 후 새로고침 바로 반영하는 방법 (0) | 2022.03.13 |
[GRADLE] 스프링부트 gradle 웹 프로젝트 생성 (0) | 2021.11.17 |
[GRADLE] 스프링부트 gradle "com.mysql.jdbc.Driver" 오류 (0) | 2021.10.24 |
[HTML/CSS] Drop down Navigation bar (드롭다운 네비게이션 바) (0) | 2021.10.17 |