Spring ํ๋ ์์ํฌ์ ajax๋ฅผ ํ์ฉํ์ฌ ๋น๋๊ธฐ ๋ฐฉ์ ์บ๋ฆฐ๋๋ฅผ ๊ตฌํํ๋ค.
๊ตฌํ ๋ฐฉ์์ ์บ๋ฆฐ๋ ์๋จ์ new Date()๋ฅผ ์ด์ฉํ์ฌ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ํ์ฌ ๋ , ์์ ํ์ํ์๊ณ ,
๋ฒํผ์ ๋๋ฌ ํ์ํ๋ ๋ , ์์ ์ซ์๊ฐ ๋ฐ๋ ๋ ๊ทธ ํ๊ทธ text๊ฐ์ JQuery๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ ธ์ ajax Data๋ก ๋๊ฒจ์ฃผ์๋ค.
๋ฒํผ์ ๋๋ฅผ๋๋ง๋ค ajax๋ฅผ ์ฌํธ์ถํ๋ ๋ฐฉ์.
๋ , ์์ ๊ฐ์ ์ปจํธ๋กค๋ฌ๋ก ๋ณด๋ด์ด ํด๋น ์์ ์ค์ผ์ค์ List ํ์์ผ๋ก ๊ฐ์ ธ์ค๊ณ ,
๊ฐ ์์ ์ฒซ์งธ๋ ์์ผ, ๋ง์ง๋ง๋ ์์ผ, ๋ง์ง๋ง ์ผ์ ๋ฑ์ ๊ตฌํด ๊ธฐ๋ณธ form์ ๋ง๋ค๊ณ
append()๋ฅผ ํตํด ๋ง๋ ํ๊ทธ๋ฅผ ๋ฟ๋ ค์ฃผ์๋ค.
๋ , ์์ด ๋ฐ๋๋๋ง๋ค ๋จ์์๋ ํ๊ทธ๋ ์ด๊ธฐํํ๊ณ ๋ฟ๋ ค์ผ ํ๊ธฐ ๋๋ฌธ์, ์์ฑ๋ trํ๊ทธ์ class ์ด๋ฆ์ ํต์ผํ์ฌ
remove()๋ก ์ญ์ ํด์ฃผ์๋ค.
๊ธฐ๋ฅ๊ตฌํํ๋ ํจ์๋ค์ ๋ฐ๋ก ๋ง๋ค์ด ํธ์ถํด์ฃผ์๋ค.
calendarlist.jsp
<%@page import="java.util.List"%>
<%@page import="java.util.Calendar"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<style type="text/css">
#menu {
float:right;
list-style-type:none;
margin:0 0 1em;
padding:8px 0 0 10px;
white-space:nowrap;
width:100%;
}
.pagination {
justify-content: center;
}
</style>
<div align="center">
<!-- ๋ฌ๋ ฅ ํ
์ด๋ธ -->
<table class="table" border="1" id="calTable">
<col width="100"><col width="100"><col width="100"><col width="100">
<col width="100"><col width="100"><col width="100">
<tr height="100">
<!-- ์ฒซ๋ฒ์งธ ํ (๋ณด์ด๋ ๋
,์๊ณผ ๋ฒํผ) -->
<td colspan="7" align="center" style="padding-top: 20px">
<a href='javascript:prevYear()'><img src='image/left.gif'></a>
<a href='javascript:prevMonth()'><img src='image/prec.gif'></a>
<font id="yyyy" color="black" style="font-size: 40px">
</font>
<font color="black" style="font-size: 40px">๋
</font>
<font id="MM" color="black" style="font-size: 40px">
</font>
<font color="black" style="font-size: 40px">์
</font>
<a href='javascript:nextMonth()'><img src='image/next.gif'></a>
<a href='javascript:nextYear()'><img src='image/last.gif'></a>
</td>
</tr>
<!-- ๋๋ฒ์งธ ํ (์์ผ) -->
<tr height="50">
<th align="center">์ผ</th>
<th align="center">์</th>
<th align="center">ํ</th>
<th align="center">์</th>
<th align="center">๋ชฉ</th>
<th align="center">๊ธ</th>
<th align="center">ํ </th>
</tr>
</table>
</div>
<script type="text/javascript">
let now = new Date();
let year = now.getFullYear(); //๋
let month = now.getMonth()+1; //์
let date = now.getDate(); //์ผ
let day = now.getDay(); //์์ผ 0~6
//alert(date);
$('#yyyy').text(year);
$('#MM').text(month);
getCalListData();
//bbslist๋ฅผ ์ทจ๋
function getCalListData() {
let selectYear = $('#yyyy').text();
let selectMonth = $('#MM').text();
$.ajax({
url:"./callistData.do",
type:"get",
data:{
year:selectYear,
month:selectMonth
},
success:function(list){
//alert('success');
//alert("๋
/์ : "+selectYear+"/"+selectMonth);
$('.calCls').remove();
let lastDay = (new Date(selectYear, selectMonth, 0)).getDate(); // ๋ง์ง๋ง ์ผ์
//alert("๋ง์ง๋ง๋ ์ผ์ : "+lastDay);
let firstDayOfWeek = (new Date(selectYear, selectMonth-1, 1)).getDay(); //์ฒซ๋ ์์ผ
//alert("์ฒซ๋ ์์ผ : "+firstDayOfWeek);
let lastDayOfWeek = (new Date(selectYear, selectMonth, 0)).getDay(); //๋ง์ง๋ง๋ ์์ผ
//alert("๋ง์ง๋ง๋ ์์ผ : "+lastDayOfWeek);
let middle = '<tr class="calCls" height="100" align="left" valign="top">';
/* ์ฒซ๋ฒ์งธ ์ค ํ์์นธ */
for(i = 1; i <= firstDayOfWeek; i++) {
middle += "<td style='background-color: #cecece'> </td>";
}
/* ๋ ์ง ํ์ */
for(i = 1; i <= lastDay; i++) {
middle += "<td>"
+ callist(selectYear, selectMonth, i)
+ " "
+ showPen(selectYear, selectMonth, i)
+ makeTable(selectYear, selectMonth, i, list)
+ "</td>";
if( (i + firstDayOfWeek) % 7 == 0 && i != lastDay) {
middle += "</tr><tr class='calCls' height='100' align='left' valign='top'>";
}
}
/* ๋ง์ง๋ง ์ค ํ์์นธ */
for(i = 1; i <= 6 - lastDayOfWeek; i++) {
middle += "<td style='background-color: #cecece'> </td>";
}
middle += "</tr>";
$("#calTable").append(middle);
},
error:function(){
alert('error');
}
});
};
function prevYear() {
year -= 1;
$('#yyyy').text(year);
getCalListData();
}
function prevMonth() {
month -= 1;
if(month < 1) {
month = 12;
year -= 1;
}
$('#yyyy').text(year);
$('#MM').text(month);
getCalListData();
}
function nextMonth() {
month += 1;
if(month > 12) {
month = 1;
year += 1;
}
$('#yyyy').text(year);
$('#MM').text(month);
getCalListData();
}
function nextYear() {
year += 1;
$('#yyyy').text(year);
getCalListData();
}
/* ๋ ์ง๋ฅผ ํด๋ฆญํ๋ฉด ๊ทธ ๋ ์ ์ผ์ ์ ๋ชจ๋ ๋ณผ ์ ์๋ callist.jsp๋ก ์ด๋ํ๋ url ๋ง๋๋ ๋ฉ์๋ */
function callist(year, month, day) {
let str = " <a href='calDayList.do?year="+year+"&month="+month+"&day="+day+"'>"+day+"</a>";
/* <a href='calDetail.do?year=2021&month=3&day=19'>19</a> */
return str;
}
/* ์ผ์ ์ ์ถ๊ฐํ๊ธฐ ์ํด์ pen ์ด๋ฏธ์ง๋ฅผ ํด๋ฆญํ๋ฉด calwrite.jsp๋ก ์ด๋ํ๋ url ๋ง๋๋ ๋ฉ์๋ */
function showPen(year, month, day) {
let str = "";
let image = "<img src='image/pen.png' width='18px' height='18px'>";
str += "<a href='calWrite.do?year="+year+"&month="+month+"&day="+day+"'>"+image+"</a>";
/* ex) <a href='calwrite.jsp?year=2021&month=3&day=19'><img src='image/pen2.png' width='18px' height='18px'></a> */
return str;
}
/* ๋ฌ๋ ฅ์ ๋ ์ง ๋ณ๋ก ์ค์ผ์ค์ ์ค์ ํ ํ
์ด๋ธ์ ์์ฑํ๋ ๋ฉ์๋ */
function makeTable(year, month, day, list) {
let str = "";
let dates = (year+"") + two(month+"") + two(day+""); //์๊ณผ ์ผ์ ํ์๋ฆฌ์ผ๋ ๋์๋ฆฌ๋ก ๋ฐ๊ฟ์ค
str += "<table>";
str += "<col width='100'>";
$.each(list, function (i, val) {
if(val.rdate.substring(0, 8) ==dates) { //'list์์ ๋ ์ง'๊ฐ '์
๋ ฅํ๋ ๋ ์ง'์ ๊ฐ์ ๋,
str += "<tr>"
+ "<td style='line-height: 3px; overflow: hidden; border-collapse:collapse;'>"
+ "<a href='calDetail.do?seq=" + val.seq + "'>"
+ "<font style='font-size:13px; color:blue'>"
+ dot3(val.title)
+ "</font>"
+ "</a>"
+ "</td>"
+ "</tr>";
}
})
str += "</table>";
return str;
}
/* ํ ๋ฌธ์๋ฅผ ๋ ๋ฌธ์๋ก ๋ณ๊ฒฝํด์ฃผ๋ ๋ฉ์๋ (ex 3์ - > 2021319 ๊ฐ ์๋ 20210319๋ก ๋ง๋ ๋ค) */
function two(msg) {
return msg.length < 2 ? "0"+msg : msg;
//๊ธธ์ด๊ฐ 2๋ณด๋ค ์์ผ๋ฉด ์์ 0์ ๋ถ์ฌ์ค๋ค.
}
/* ์ผ์ ์ ์ ๋ชฉ์ด ๊ธธ ๋ ... ์ผ๋ก ์ฒ๋ฆฌํ๋ ๋ฉ์๋ (ex 4๊ธ์ ์ ํ์ผ ๋, CGV์์ ๋ฐ์ดํธ -> CGV์... ) */
function dot3(msg) {
let str = "";
if(msg.length > 4) {
str = msg.substring(0, 4); // ex) CGV์์ ๋ฐ์ดํธ -> CGV์...
str += "...";
}
else {
str = msg;
}
return str;
}
</script>
calWrite.jsp
์ผ์ ์ ์์ฑํ๋ ํ์ด์ง.
elํ๊ทธ์ coreํ๊ทธ๋ฅผ ํ์ฉํ๋ค.
select ํ๊ทธ์์ ๊ธฐ๋ณธ selected ๊ฐ์ด ์ ํํ ์,์ผ๋ก ํ์๋๊ณ ์ถ์๋๋ฐ,
์๋ฐ์คํฌ๋ฆฝํธ์์ ์ ํํ๋ ๋ฐฉ๋ฒ์ ์ฐพ์ ํ์ฉํด๋ณด์๋ค.
โป JSP์์๋ ELํ๊ทธ์ ์๋ฐ์คํฌ๋ฆฝํธ ํ ํ๋ฆฟ ๋ฆฌํฐ๋ด ํํ์ ๋ชจ์์ด ${}๋ก ๋๊ฐ๋ค.
๊ทธ๋์ ๋ฆฌํฐ๋ด ํํ์์๋ ๊ตฌ๋ถ์ ์ฃผ๊ธฐ ์ํด ๋ฌ๋ฌ ์ฌ์ธ ์์ \(์ญ์ฌ๋์)๋ฅผ ๋ฃ์ด์ฃผ๋ฉด ์ ์์ ์ผ๋ก ์๋ํ๊ฒ ๋๋ค.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<div align="center">
<form action="calWriteAf.do" method="get">
<table border="1">
<col width="50"><col width="500">
<tr>
<th>ID</th>
<td>${login.id }<input type="hidden" name="id" value="${login.id }"> </td>
</tr>
<tr>
<th>์ ๋ชฉ</th>
<td>
<input type="text" size="60" name="title">
</td>
</tr>
<tr>
<th>์ผ์ </th>
<td>
<!-- -------์ฐ๋ ์ ํ------- -->
<c:if test="${param.year != null }">
<select id="year" name="year">
<c:forEach begin="${param.year - 5 }" end="${param.year + 5 }" step="1" var="i">
<option value="${i}">${i}</option>
</c:forEach>
</select>๋
</c:if>
<!-- -------์ ์ ํ------- -->
<c:if test="${param.month != null }">
<select id="month" name="month">
<c:forEach begin="1" end="12" step="1" var="i">
<option value="${i}">${i}</option>
</c:forEach>
</select>์
</c:if>
<!-- -------์ผ ์ ํ------- -->
<c:if test="${param.month != null }">
<select id="day" name="day">
<c:forEach begin="1" end="${maxDay }" step="1" var="i">
<option value="${i}">${i}</option>
</c:forEach>
</select>์
</c:if>
<!-- ์ ์ ํ------- -->
<c:if test="${param.month != null }">
<select id="hour" name="hour">
<c:forEach begin="0" end="23" step="1" var="i">
<option value="${i}">${i}</option>
</c:forEach>
</select>์
</c:if>
<!-- ๋ถ ์ ํ------- -->
<c:if test="${param.month != null }">
<select id="min" name="min">
<c:forEach begin="0" end="59" step="1" var="i">
<option value="${i}">${i}</option>
</c:forEach>
</select>๋ถ
</c:if>
</td>
</tr>
<tr>
<th>๋ด์ฉ</th>
<td>
<textarea rows="20" cols="60" name="content"></textarea>
</td>
</tr>
<tr>
<td colspan="2" align="center">
<br><input type="submit" value="์ผ์ ์ถ๊ฐ">
</td>
</tr>
</table>
</form>
</div>
<script type="text/javascript">
let now = new Date();
let hour = now.getHours();
let minutes = now.getMinutes();
$('#year > option[value="${param.year}"]').attr('selected', true);
$('#month > option[value="${param.month}"]').attr('selected', true);
$('#day > option[value="${param.day}"]').attr('selected', true);
$(`#hour > option[value=\${hour}]`).attr('selected', true);
$(`#min > option[value=\${minutes}]`).attr('selected', true);
</script>
Calcontroller.java
package bit.com.a.controller;
import java.util.Calendar;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
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.ResponseBody;
import bit.com.a.dto.BbsDto;
import bit.com.a.dto.CalParam;
import bit.com.a.dto.CalendarDto;
import bit.com.a.dto.MemberDto;
import bit.com.a.service.CalService;
import util.UtilEx;
@Controller
public class CalController {
@Autowired
CalService calService;
@RequestMapping(value = "callist.do", method = RequestMethod.GET)
public String callist(Model model) {
model.addAttribute("doc_title", "์ผ์ ๊ด๋ฆฌ");
return "callist.tiles";
};
@ResponseBody
@RequestMapping(value = "callistData.do", method = RequestMethod.GET)
public List<CalendarDto> callistData(String year, String month, HttpServletRequest req) {
System.out.println("year : "+year+ " month : "+month);
MemberDto mDto = (MemberDto)req.getSession().getAttribute("login");
CalParam param = new CalParam(mDto.getId(), year+UtilEx.two(month));
List<CalendarDto> list = calService.getCalList(param);
return list;
}
@RequestMapping(value = "calDetail.do", method = { RequestMethod.GET, RequestMethod.POST })
public String calDetail(Model model, Integer seq) {
if(seq == null) seq = 0;
System.out.println("seq : "+seq);
CalendarDto dto = calService.calDetail(seq);
model.addAttribute("cal", dto);
model.addAttribute("doc_title", "์ผ์ ์์ธํ์ด์ง");
return "calDetail.tiles";
}
@RequestMapping(value = "calWrite.do", method = { RequestMethod.GET, RequestMethod.POST })
public String calWrite(Model model, CalParam param) {
model.addAttribute("doc_title", "์ผ์ ์ฐ๊ธฐ");
model.addAttribute("param", param);
Calendar cal = Calendar.getInstance();
int year = Integer.parseInt(param.getYear());
int month = Integer.parseInt(param.getMonth());
cal.set(year, month-1, 1);
int maxDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
//System.out.println(year+"๋
"+month+"์์ ์ผ์ : "+maxDay);
model.addAttribute("maxDay", maxDay);
return "calWrite.tiles";
}
@RequestMapping(value = "calWriteAf.do", method = { RequestMethod.GET, RequestMethod.POST })
public String calWriteAf(CalendarDto dto, CalParam param) {
String rdate = param.getYear()+UtilEx.two(param.getMonth())
+UtilEx.two(param.getDay())+UtilEx.two(param.getHour())+UtilEx.two(param.getMin());
System.out.println("๊ธ์ด์๊ฐ : "+rdate);
System.out.println(dto.toString());
dto.setRdate(rdate);
int write = calService.calWrite(dto);
if(write > 0 ) {
System.out.println("๊ธ์ฐ๊ธฐ ์ฑ๊ณต");
return "redirect:/callist.do";
} else {
System.out.println("๊ธ์ฐ๊ธฐ ์คํจ");
return "redirect:/calWrite.do";
}
}
@RequestMapping(value = "calDelete.do", method = RequestMethod.GET)
public String calDelete(int seq) {
int del = calService.calDelete(seq);
if(del > 0 ) {
System.out.println("์ญ์ ์ฑ๊ณต");
} else {
System.out.println("์ญ์ ์คํจ");
}
return "redirect:/callist.do";
}
@RequestMapping(value = "calUpdate.do", method = { RequestMethod.GET, RequestMethod.POST })
public String calUpdate(Model model, int seq) {
model.addAttribute("doc_title", "์ผ์ ์์ ");
CalendarDto dto = calService.calDetail(seq);
CalParam param = new CalParam(null, null,
dto.getRdate().substring(0, 4),
dto.getRdate().substring(4, 6),
dto.getRdate().substring(6, 8),
dto.getRdate().substring(8, 10),
dto.getRdate().substring(10, 12));
System.out.println(param.toString());
System.out.println(dto.toString());
model.addAttribute("param1", param);
model.addAttribute("cal", dto);
return "calUpdate.tiles";
}
@RequestMapping(value = "calUpdateAf.do", method = { RequestMethod.GET, RequestMethod.POST })
public String calUpdateAf(CalendarDto dto, CalParam param) {
String rdate = param.getYear()+UtilEx.two(param.getMonth())
+UtilEx.two(param.getDay())+UtilEx.two(param.getHour())+UtilEx.two(param.getMin());
System.out.println("๊ธ์ด์๊ฐ : "+rdate);
dto.setRdate(rdate);
System.out.println(dto.toString());
int update = calService.calUpdate(dto);
if(update > 0 ) {
System.out.println("์์ ์ฑ๊ณต");
return "redirect:/callist.do";
} else {
System.out.println("์์ ์คํจ");
return "redirect:/calWrite.do";
}
}
@RequestMapping(value = "calDayList.do", method = { RequestMethod.GET, RequestMethod.POST })
public String calDayList(Model model, @ModelAttribute("param2")CalParam param, HttpSession session) {
model.addAttribute("doc_title", "ํ๋ฃจ ์ผ์ ");
MemberDto mDto = (MemberDto)session.getAttribute("login");
param.setId(mDto.getId());
param.setYyyyMMdd(param.getYear()+UtilEx.two(param.getMonth())+UtilEx.two(param.getDay()));
System.out.println(param.toString());
List<CalendarDto> list = calService.getDayList(param);
model.addAttribute("dayList", list);
return "calDayList.tiles";
}
}
calendar.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="Cal">
<!-- ์บ๋ฆฐ๋ ๋ฆฌ์คํธ -->
<select id="callist" parameterType="bit.com.a.dto.CalParam" resultType="bit.com.a.dto.CalendarDto">
SELECT SEQ, ID, TITLE, CONTENT, RDATE, WDATE
FROM
(SELECT ROW_NUMBER()OVER(PARTITION BY SUBSTR(RDATE, 1, 8)ORDER BY RDATE ASC) AS RNUM,
SEQ, ID, TITLE, CONTENT, RDATE, WDATE
FROM CALENDAR
WHERE ID=#{id} AND SUBSTR(RDATE, 1, 6)=#{yyyyMM} )
WHERE RNUM BETWEEN 1 AND 3
</select>
<!-- ๋ํ
์ผ -->
<select id="detail" parameterType="int" resultType="bit.com.a.dto.CalendarDto">
SELECT *
FROM CALENDAR
WHERE SEQ=#{seq}
</select>
<!-- ๊ธ์ฐ๊ธฐ -->
<insert id="write" parameterType="bit.com.a.dto.CalendarDto">
INSERT INTO CALENDAR(SEQ, ID, TITLE, CONTENT, RDATE, WDATE)
VALUES(SEQ_CAL.NEXTVAL, #{id}, #{title}, #{content}, #{rdate}, SYSDATE)
</insert>
<!-- ๊ธ์ญ์ -->
<delete id="delete" parameterType="int">
DELETE FROM CALENDAR
WHERE SEQ=#{seq}
</delete>
<!-- ๊ธ์์ -->
<update id="update" parameterType="bit.com.a.dto.CalendarDto">
UPDATE CALENDAR
SET TITLE=#{title}, CONTENT=#{content}, RDATE =#{rdate}
WHERE SEQ=#{seq}
</update>
<!-- ํ๋ฃจ ์ผ์ -->
<select id="daylist" parameterType="bit.com.a.dto.CalParam" resultType="bit.com.a.dto.CalendarDto">
SELECT SEQ, ID, TITLE, CONTENT, RDATE, WDATE
FROM
(SELECT ROW_NUMBER()OVER(PARTITION BY SUBSTR(RDATE, 1, 8)ORDER BY RDATE ASC) AS RNUM,
SEQ, ID, TITLE, CONTENT, RDATE, WDATE
FROM CALENDAR
WHERE ID=#{id} AND SUBSTR(RDATE, 1, 8)=#{yyyyMMdd} )
ORDER BY RDATE ASC
</select>
</mapper>
'๐ป ๊ฐ๋ฐ > ๐ TIL (Today I Learned)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
210427 TIL(D+74 ์คํ๋ง ํฌํ ๊ตฌํ, Crawling, ์ปค์คํ ์ด๋ ธํ ์ด์ ํ์ฉํ AOP, ์น ์์ผ) (0) | 2021.04.27 |
---|---|
210422 TIL (D+71 ์คํ๋ง File ์ ๋ก๋, ๋ค์ด๋ก๋ ๊ตฌํ) (0) | 2021.04.22 |