๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์Šคํ”„๋ง Spring/๐Ÿงถ ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ Spring

์Šคํ”„๋ง Tiles๋ฅผ ํ™œ์šฉํ•œ ๊ฒŒ์‹œํŒ๋งŒ๋“ค๊ธฐ (์บ˜๋ฆฐ๋” ์ž‘์„ฑ, ์ˆ˜์ •, ์‚ญ์ œ) ํ’€์บ˜๋ฆฐ๋” ํ™œ์šฉ

by Meteora_ 2021. 6. 25.
728x90

Fullcalendar ์ „์ฒดํ™”๋ฉด

 

 

<%@page import="bit.com.a.dto.CalendarPlugDto"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<link href="<%=request.getContextPath() %>/fcalLib/main.css" rel="stylesheet">
<script src="<%=request.getContextPath() %>/fcalLib/main.js"></script>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<style>
.body {
  margin: 40px 10px;
  padding: 0;
  font-family: Arial, Helvetica Neue, Helvetica, sans-serif;
  font-size: 12px;
}

#calendar {
  max-width: 900px;
  margin: 0 auto;
} 
</style>

<%
List<CalendarPlugDto> list = (List<CalendarPlugDto>)request.getAttribute("callist");
/*
for(CalendarPlugDto c : list){
	System.out.println(c.toString());
}
*/



// JSONObject, JSONArray <-- java json

String events = "[";

for(CalendarPlugDto c : list){
	events += "{ id:'" + c.getId() + "', title:'" + c.getTitle() + "', start:'" + c.getStartdate() + "', end:'" + c.getEnddate() + "', constraint:'" + c.getContent() + "',color:'" +c.getColor()+ "',seq:'"+c.getSeq()+"'},";	
}



events = events.substring(0, events.lastIndexOf(","));
events += "]";

System.out.println(events);

request.setAttribute("events", events);
%>






<!--์นผ๋ Œ๋” ๋ฆฌ์ŠคํŠธ -->
<div class="body">
	<div id="calendar"></div>
</div>

Fullcalendar.js

 

<script type="text/javascript">
document.addEventListener("DOMContentLoaded", function () {
	
	let calendarEl = document.getElementById('calendar');
	
	let calendar = new FullCalendar.Calendar(calendarEl, {
		
		headerToolbar: {
			left: "prev,next today",
			center: "title",
			right: 'dayGridMonth,timeGridWeek,timeGridDay,listMonth'
		},
		initialDate: new Date(),     // '2021-05-01',	์ฒ˜์Œ ์‹คํ–‰์‹œ ๊ธฐ๋ถ„์ด ๋˜๋Š” ๋‚ ์งœ
		locale: 'ko',				 // ํ•œ๊ธ€์„ค์ •
		navLinks: true,
		businessHours: true,
		events:<%=request.getAttribute("events") %>
		
		
		<%-- <%=request.getAttribute("events") %> --%>
	});
	
	
	
	
	
	
	calendar.render();	// rendering	
	
	calendar.on("dateClick", function (info) {
		//alert('dateClick');
		$('#exampleModal').modal('show');
	});
	
	//ํด๋ฆญ์‹œ ๋””ํ…Œ์ผ ํ™”๋ฉด
	calendar.on("eventClick", function(info) {
		//alert(info.event.seq);
		$('#datail').modal('show');
		
		
		$('#d_title').val(info.event.title);
		$('#d_id').val(info.event.id);
		$('#d_content').val(info.event.constraint);
		$('#d_start').val(info.event.start);
		
		
		//์‚ฌ์šฉ์ž๊ฐ€ ์ข…๋ฃŒ๋‚ ์งœ๋ฅผ ์ž…๋ ฅํ•˜์ง€ ์•Š์„์‹œ 
		//์ข…๋ฃŒ๋‚ ์งœ์— ์‹œ์ž‘๋‚ ์งœ ์ž…๋ ฅ
		if($("#d_end").val() == ""){
			$('#d_end').val(info.event.start);
		}else{
			$('#d_end').val(info.event.end);
		}
		
	
		$('#d_laval').val();
		
	});
	
	
	
});

 $("#ajaxlist").click(function () {
	 $.ajax({
	      url: "Acalendarpluglist.do",
	      type: "GET",
	      cache: false,
	      dataType: "json",
	      data: $('#like_form').serialize(), //์•„์ด๋””๊ฐ€ like_form์ธ ๊ณณ์˜ ๋ชจ๋“  ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์™€ ํŒŒ๋ผ๋ฏธํ„ฐ ์ „์†ก ํ˜•ํƒœ(ํ‘œ์ค€ ์ฟผ๋ฆฌํ˜•ํƒœ)๋กœ ๋งŒ๋“ค์–ด์คŒ
	      success:
	      function(data){ //ajaxํ†ต์‹  ์„ฑ๊ณต์‹œ ๋„˜์–ด์˜ค๋Š” ๋ฐ์ดํ„ฐ ํ†ต์งธ ์ด๋ฆ„ =data
	      
			var list = date;	      
	      
	      },
	      error:
	      function (request, status, error){
	      alert("ajax์‹คํŒจ")
	      }
	      });
})
 

</script>

CALENDARPLUG TABLE

 

fcal jsํŒŒ์ผ ์œ„์น˜

<link href="<%=request.getContextPath() %>/fcalLib/main.css" rel="stylesheet">
<script src="<%=request.getContextPath() %>/fcalLib/main.js"></script>

๋ชฉ๋ก ์ขŒ์ธก ๋ฉ”๋‰ด์˜ "์ผ์ •์ถ”๊ฐ€" ํด๋ฆญ์‹œ

ํ™”๋ฉด์ „ํ™˜๋˜์ง€์•Š๊ณ  modal์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ทธ ํŽ˜์ด์ง€์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์ผ์ •์ถ”๊ฐ€ ๊ฐ€๋Šฅ

์ œ๋ชฉ, ์บ˜๋ฆฐ๋”์— ์ผ์ •์„ ํ‘œ์‹œํ•  ์ƒ‰์ƒ, ์‹œ์ž‘๋‚ ์งœ, ์ข…๋ฃŒ๋‚ ์งœ, ๋‚ด์šฉ ์ถ”๊ฐ€๊ฐ€๋Šฅ

 


left-calendar.jsp

์™ผ์ชฝ ๋ฉ”๋‰ด์—์„œ ์ผ์ •์ถ”๊ฐ€ ๋ˆ„๋ฅผ์‹œ ๋ชจ๋‹ฌ๋กœ ์ฐฝ ์ƒ์„ฑ

 

<%@page import="java.util.Calendar"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
   <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/timepicker/1.3.5/jquery.timepicker.min.css"> 
   <script src="//cdnjs.cloudflare.com/ajax/libs/timepicker/1.3.5/jquery.timepicker.min.js"></script>
  <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    
    <%
    Calendar cal = Calendar.getInstance();
    
    int thour = cal.get(Calendar.HOUR_OF_DAY);
    int tmin = cal.get(Calendar.MINUTE);
    
    %>
    

<div class="menu_table">
	<ul style="width: 100%">
		<li class="title">์ผ์ •๊ด€๋ฆฌ</li>
		<li class="subtitle">์ผ์ •</li>
		<li class="menu_item">
			<a href="calendarpluglist.do" title="์ผ์ •">์ผ์ •๋ชฉ๋ก</a>
		</li>
		<li class="menu_item">
			<a href="#none" id = "insertDate" title="์ผ์ •์ถ”๊ฐ€" data-toggle="modal" data-target="#insertCal">์ผ์ •์ถ”๊ฐ€</a>
		</li>					
	</ul>
</div>      

<!-- ๋ชจ๋‹ฌ ์ฐฝ ํ…Œ๋‘๋ฆฌ -->
    <div class="modal fade" id="insertCal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
      <!-- ๋ชจ๋‹ฌ ๋Œ€ํ™”์ฐฝ ๋ณธ์ฒด-->
      <div class="modal-dialog" role="document">
        <!-- ๋ชจ๋‹ฌ ์ฝ˜ํ…์ธ  ๋ถ€๋ถ„ -->
        <div class="modal-content">
          <!-- ๋ชจ๋‹ฌ ํ—ค๋”ใƒผ -->
          <div class="modal-header">
            <!-- ๋ชจ๋‹ฌ ์ œ๋ชฉ -->
            <h5 class="modal-title" id="exampleModalLabel">์ผ์ •์ถ”๊ฐ€</h5>
            <!-- ๋‹ซ๊ธฐ ์•„์ด์ฝ˜ -->
            <button type="button" class="close" data-dismiss="modal" aria-label="Close">
             <span aria-hidden="true">&times;</span>
            </button>
          </div>
          <!-- ๋ชจ๋‹ฌ ๋ณธ๋ฌธ -->
          <div class="modal-body">

						<form action="" id="_frm">          	
						<table class = "list_table">
						<col width="500"><col width="450">
						
						<tr>
						
							<th>ID</th>
							<td>
							${mem.id }
							<input type = "hidden" name = "id" value = "${mem.id }">
							</td>
						</tr>
						
						<tr>
						
							<th>์ œ๋ชฉ</th>
							<td>
								<input type = "text" size = "60" name = "title">
							</td>
						</tr>
						
						<tr>
							
							<th>๋ผ๋ฒจ ์ƒ‰์ƒ</th>
							<td>
							์ผ์ •์— ํ‘œ์‹œํ•  ๋ผ๋ฒจ ์ƒ‰์ƒ์„ ๊ณ ๋ฅด์„ธ์š”!
							<select name = "color">
								<option value="red">๋ ˆ๋“œ</option>
								<option value="blue">๋ธ”๋ฃจ</option>
								<option value="orange">์˜ค๋ Œ์ง€</option>
								<option value="yellow">์—˜๋กœ์šฐ</option>
								<option value="black">๋ธ”๋ž™</option>
							</select>
							
							</td>
						</tr>
						
						
							<tr><!--์ผ์ •  -->
							
								<th>์ผ์ •</th>
								<td>
									์‹œ์ž‘์ผ<input name="startdate" type="datetime-local" id="time-holder" value="" />
									<br>
									์ข…๋ฃŒ์ผ<input name="enddate" type="datetime-local"  id="time-holder2" />
									
								
									
							</tr><!--์ผ์ •๋  -->
								
								<tr>
									<th>๋‚ด์šฉ</th>
									<td>
										<textarea rows="20" cols="60" name = "content"></textarea>
									</td>
									
								</tr>
								
								
								<tr>
								
									<td colspan="2">
										<input type="button" id = "_btnWrite" value = "์ผ์ •์ถ”๊ฐ€">
									
									</td>
								</tr>
								
									</table>
						          	
						 </form>         	
						          	
          	
          	
          </div>
          <!-- ๋ชจ๋‹ฌ ๊ผฌ๋ฆฌ๋ง -->
          <div class="modal-footer">
            <!-- ๋‹ซ๊ธฐ ๋ฒ„ํŠผ -->
            <button type="button" class="btn btn-secondary" data-dismiss="modal">๋‹ซ๊ธฐ</button>
          </div>
        </div>
      </div>
    </div>

<script>

$("#_btnWrite").click(function () {
	$("#_frm").attr("action","calplugwriteAf.do").submit();
	
});


//์ผ์ • ์ถ”๊ฐ€์‹œ ํ˜„์žฌ์‹œ๊ฐ„์œผ๋กœ ์„ค์ •
//https://hianna.tistory.com/319


$("#insertDate").click(function () {
	
	document.getElementById('time-holder').value= new Date().toISOString().slice(0, 16);
	document.getElementById('time-holder2').value= new Date().toISOString().slice(0, 16);

});
</script>

CalendarPlugController

 

package bit.com.a.controller;

import java.util.List;

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.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import bit.com.a.dto.CalendarPlugDto;
import bit.com.a.dto.MemberDto;
import bit.com.a.service.CalendarPlugService;

@Controller
public class CalendarPlugController {
	
	@Autowired
	CalendarPlugService service;
	
	@RequestMapping(value = "calendarpluglist.do", method = RequestMethod.GET)
	public String calendarpluglist(Model model, HttpSession session) {
		
		model.addAttribute("doc_title", "์ผ์ •๋ชฉ๋กplug");
		
		//๋กœ๊ทธ์ธ ์„ธ์…˜์ €์žฅ
		MemberDto dto = (MemberDto)session.getAttribute("login");
		model.addAttribute("mem", dto);
		
		//callist๋ฅผ ํ•˜๊ธฐ์œ„ํ•ด cal ์ธ์Šคํ„ด์Šค ์„ ์–ธ
		//์ผ์ •์€ ์ž๊ธฐ๊ป๋งŒ ๋ณผ์ˆ˜์žˆ๋‹ค
		
		CalendarPlugDto cal = new CalendarPlugDto();
		cal.setId(dto.getId());
		
		List<CalendarPlugDto> list = service.getCalendarPlugList(cal);
		
		model.addAttribute("callist", list);
		
		return "calendarpluglist.tiles";
	}
	
	@RequestMapping(value = "calplugwriteAf.do", method = RequestMethod.GET)
	public String calwrtieAf(CalendarPlugDto dto) {
		
		System.out.println("calplugwriteAf Controller");
		
		boolean calwrite = service.addCal(dto);
		
		if(calwrite) {
			System.out.println("์ผ์ •์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค");
			return "redirect:/calendarpluglist.do";
		}
		
		return "redirect:/calendarpluglist.do";
	}
	



}

๋Œ“๊ธ€