[예약] 내가 개발자라면 어떤 순서대로 작성해야 할까? 스토리보드는 사용자 흐름으로 작성한 것
프로그램 정보 다음에 예약자 정보
1 관리자 예약 프로그램 정보 CRUD
2 관리자 예약자 관리 RUD 사용자가 예약한것을 관리함
3 사용자 예약 프로그램 정보 R : 1번이 돼야 C를 가져와서 LIST를 뿌림, 사용자 CRUD를 실행해야하면 3번을 먼저 해야함
4 사용자 예약 CRUD : 예약함
1 -3 -4-2번 순으로 개발하는게 좋음
WBS (Work Breakdown Strucutre) : 프로젝트 관리 및 시스템 엔지니어링에서 프로젝트 소규모의 구성 단위까지 나누어 전달할 수 있는 기능
https://debasedev.tistory.com/54
[PM] WBS (Work Breakdown Structure) 란?
WBS (Work Breakdown Structure) 전체 주간 회의 진행 중에 신규 개발건에 대해 이야기가 나왔는데 한참을 이야기하던 도중에 "해당 내용 WBS 로 작성해서 올려봐" 라는 말을 듣고 뭔진 모르겠지만 일단
debasedev.tistory.com
ReservationAdminController
//예약정보 등록/수정
@RequestMapping(value= "/admin/rsv/rsvRegist.do")
public String rsvRegist(@ModelAttribute("serviceVO") egovframework.let.rsv.service.ReservationVO ReservationVO,HttpServletRequest request, Model model) throws Exception{
LoginVO user= (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
if(user == null) {
model.addAttribute("message", "로그인 후 사용가능합니다.");
return "forward:/adming/rsv/rsvServcieList.do";
}else {
model.addAttribute("USER_INFO", user);
}
//정보가 비어져있으면 등록페이지로 가고 아이디 정보가 있으면 서치해서 가져와서
//수정페이지로 가라
ReservationVO result = new ReservationVO();
if(!EgovStringUtil.isEmpty(ReservationVO.getResveId())) {
result = reservationService.selectReservation(ReservationVO);
}
model.addAttribute("result", result);
request.getSession().removeAttribute("sessionReservation");
//jsp위치
return "admin/rsv/RsvRegist";
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Language" content="ko">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no"/>
<title>수업용 게시판</title>
<!-- BBS Style -->
<link href="/asset/BBSTMP_0000000000001/style.css" rel="stylesheet"/>
<!-- 공통 style -->
<link href="/asset/LYTTMP_0000000000000/style.css" rel="stylesheet"/>
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<link rel="stylesheet" type="text/css" href="/asset/front/style.css">
<link href="/asset/front/style.css" rel="stylesheet"/>
<!-- JQUERY UI -->
//달력
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
//시간
<script src="//cdnjs.cloudflare.com/ajax/libs/timepicker/1.3.5/jquery.timepicker.min.js"></script>
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/timepicker/1.3.5/jquery.timepicker.mis.css">
</head>
<body>
<c:choose>
<c:when test="${not empty searchVO.resveId}">
<c:set var="actionUrl" value="/admin/rsv/rsvUpdate.do"/>
</c:when>
<c:otherwise>
<c:set var="avtionUrl" value="/admin/rsv/rsvInsert.do"/>
</c:otherwise>
</c:choose>
<%--기본url --%>
<c:url var="_BASE_PARAM" value="">
<c:param name="searchCondition" value=""/>
<c:if test="${not empty searchVO.searchKeyword}"><c:param name="searchKeyword" value="${searchVO.searchKeyword}"/></c:if>
</c:url>
<%-- <content 시작> --%>
<div id="content">
<div class="container">
<div id="contents">
<form action="${actionUrl}" method="post" id="frm" name="frm" onsubmit="return regist()">
<input type="hidden" name="resveId" value="${result.resveId}"/>
<table class="chart2">
<caption>예약정보 작성</caption>
<colgroup>
<col style="width:150px"/>
<col />
</colgroup>
<tbody>
<tr>
<th scope="row">프로그램명</th>
<td>
<input type="text" id="resveSj" name="resveSj" title="제목입력" class="q3" value="<c:out value="${result.resveSj}"/>"/>
</td>
</tr>
<tr>
<th scope="row">프로그램 종류</th>
<td>
<select id="resveSeCode" name="resveSeCode">
<option value="TYPE01">선착순</option>
<option value="TYPE02"><c:if test="${result.resveSeCode eq 'TYPE02'}">selected="selected"</c:if>승인관리</option>
</select>
</td>
</tr>
<tr>
<th scope="row">운영기관</th>
<td>
<input type="text" id="useBeginDt" class="datepicker" name="useBeginDt" title="운영시작일" value="<c:out value="${result.useBeginDt}"/>" readonly="readonly"/>
~ <input type="text" id="useEndDt" class="datepicker" name="useEndDt" title="운영종료일" value"<c:out value="${result.useEndDt}"/>" readonly="readonly"/>
</td>
</tr>
<tr>
<th scope="row">운영시간</th>
<td>
<input type="text" id="useBeginTime" class="timepicker" name="useBeginTime" title="운영시작시간" value="<c:out value="${result.useBeginTime}"/>"readonly="readonly"/>
~<input type="text" id="useEndTime" class="timepicker" name="useEndTime" title="운영종료시간" value="<c:out value="${result.useEndTime}"/>"readonly="readonly"/>
</td>
</tr>
<tr>
<th scope="row">신청기간</th>
<td>
<input type="text" id="reqstBgnde" class="datepicker" name="reqstBgnde" title="신청시작일" value="<c:out value="${result.reqstBgnde}"/>" readonly="readonly"/>
~<input type="text" id="reqstEndde" class="datepicker" name="reqstEndde" title="신청종료일" value="<c:out value="${result.reqstEndde}"/>" readonly="readonly"/>
</td>
</tr>
<tr>
<th scope="row">강사명</th>
<td>
<input type="text" id="recNm" name="recNm" title="강사명" value="<c:out value="${result.recNm}"/>"/>
</td>
</tr>
<tr>
<th scope="row">신청인원수</th>
<td>
<input type="number" id="maxAplyCnt" name="maxAplyCnt" title="신청인원수" value="<c:out value="${result.maxAplyCnt}"/>"/>명
</td>
</tr>
<tr>
<th scope="row">내용</th>
<td>
<textarea rows="resveCn" name="resveCn" row="15" title="내용입력"><c:out value="${result.resveCn}"/></textarea>
</td>
</tr>
</tbody>
</table>
<div class="btn-cont ar">
<c:choose>
<c:when test="${not empty searchVO.resveId}">
<c:url var="uptUrl" value="/admin/rsv/rsvRegist.do${_BASE_PARAM}">
<c:param name="resveId" value="${result.resveId}"/>
</c:url>
<a href="${uptUrl}" id="btn-reg" class="btn">수정</a>
<c:url var="delUrl" value="/admin/rsv/rsvDelete.do${_BASE_PARAM}">
<c:param name="resveId" value="${result.resveId}"/>
</c:url>
<a href="delUrl" id="btn-del" class="btn"><i class="ico-del">삭제</a>
</c:when>
<c:otherwise>
<a href="#none" id="btn-reg" class="btn spot">등록</a>
</c:otherwise>
</c:choose>
<c:url var="listUrl" value="/admin/rsv/rsvSelectList.do${_BASE_PARAM}"/>
<a herf="${listUrl}" class="btn">취소</a>
</div>
</form>
</div>
</div>
</div>
<!-- content끝 -->
<script>
$(document).ready(function(){
//datepicker
$(".datepicker").datepicker({
dateFormat: 'yy-mm-dd',
prevText: '이전달',
nextText: '다음달',
monthNames: ['1월','2월','3월','4월','5월','6월','7월','8월','9월','10월','11월','12월'],
monthNamesShort:['1월','2월','3월','4월','5월','6월','7월','8월','9월','10월','11월','12월'],
dayNames: ['일','월','화','수','목','금','토'],
dayNamesShort: ['일','월','화','수','목','금','토'],
showMonthAfterYear:true,
yearSuffix: '년'
});
$('.timepicker').timepicker({
timeFormat: 'HH:mm',
interval: 60,
minTime: '10',
maxTime: '18:00',
startTime: '10:00',
dropdown:true,
scrollbar:true
});
//예약정보등록
$('#btn-reg').click(function(){
$("#frm").submit();
return false;
});
//예약글 삭제
$("#btn-del").click(function(){
if(!confirm("삭제하시겠습니까?")){
return false;
}
});
});
function regist() {
if(!$("#resveSj").val()){
alert("프로그램명을 입력해주세요");
return false;
}
}
</script>
</body>
</html>
https://velog.io/@jch9537/URI-URL
URI & URL
웹개발 공부를 하면서 URL과 URI에 대해 자주 들었지만 둘 사이의 명확한 차이점을 알지 못해 정리를 해보게 되었다.결론부터 말하면 URI가 URL의 상위개념이며 공부를 하며 느낀 점은 URL이라고 부
velog.io
//예약정보 등록하기
@RequestMapping(value="/admin/rsv/rsvInsert.do")
public String insert(@ModelAttribute("searchVO")ReservationVO searchVO, HttpServletRequest request, ModelMap model) throws Exception{
//이중 서브밋 방지 체크
if(request.getSession().getAttribute("sessionReservation") != null) {
return "forward:/admin/rsv/rsvSelectList.do";
}
LoginVO user= (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
if(user == null) {
model.addAttribute("message", "로그인 후 사용가능합니다.");
return "forward:/admin/rsv/rsvSelectList.do";
}
searchVO.setUserId(user.getId());
reservationService.insertReservation(searchVO);
//이중 서브밋 방지
request.getSession().setAttribute("sessionReservation", searchVO);
return "forward:/admin/rsv/rsvSelectList.do";
}
//예약정보 수정하기
@RequestMapping(value="/admin/rsv/rsvUpdate.do")
public String rsvUpdate(@ModelAttribute("searchVO") ReservationVO searchVO,HttpServletRequest request, ModelMap model)throws Exception{
//이중 서브밋 방지 체크
if(request.getSession().getAttribute("sessionReservation") != null) {
return "forward:/admin/rsv/rsvSelectList.do";
}
LoginVO user= (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
if(user == null) {
model.addAttribute("message", "로그인 후 사용가능합니다.");
return "forward:/admin/rsv/rsvSelectList.do";
}
searchVO.setUserId(user.getId());
reservationService.updateReservation(searchVO);
//이중서브밋 방지
request.getSession().setAttribute("sessionReservation", searchVO);
return "forward:/admin/rsv/rsvSelectList.do";
}
//예약정보 삭제하기
@RequestMapping(value="/admin/rsv/rsvDelete.do")
public String rsvDelete(@ModelAttribute("searchVO") ReservationVO searchVO,HttpServletRequest request, ModelMap model)throws Exception{
LoginVO user= (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
if(user == null) {
model.addAttribute("message", "로그인 후 사용가능합니다.");
return "forward:/admin/rsv/rsvSelectList.do";
}
searchVO.setUserId(user.getId());
reservationService.deleteReservation(searchVO);
return "forward:/admin/rsv/rsvSelectList.do";
}
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>예약관리</title>
<!-- BoardSelectList CSS -->
<!-- BBS Style -->
<link href="/asset/BBSTMP_0000000000001/style.css" rel="stylesheet"/>
<!-- 공통 style -->
<link href="/asset/LYTTMP_0000000000000/style.css" rel="stylesheet"/>
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
</head>
<body>
<!-- 기본 URL -->
<c:url var="_BASE_PARAM" value="">
<c:param name="searchCondition" value="${searchVO.searchCondition}"/>
<c:if test="${not empty searchVO.searchKeyword}">
<c:param name="searchKeyword" value="${searchVO.searchKeyword}"/>
</c:if>
</c:url>
<!-- content 시작 -->
<div id="content">
<div class="container">
<div id="contents">
<!--검색영역 -->
<div id="bbs_search">
<form action="/admin/rsv/rsvSelectList.do" name="frm" method="post">
<fieldset>
<legend>검색조건입력폼</legend>
<label for="ftext" class="hdn">검색분류선택</label>
<select name="searchCondition" id="ftext">
<option value="0" <c:if test="${searchVO.searchCondition eq '0'}">selected="selected"</c:if>>프로그램명</option>
<option value="1" <c:if test="${searchVO.searchCondition eq '1'}">selected="selected"</c:if>>내용</option>
</select>
<label for="inp_text" class="hdn">검색어입력</label>
<input name="searchKeyword" value="<c:out value="${searchVO.searchKeyword}"/>" type="text" class="inp_s" id="inp_text"/>
<span class="bbtn_s"><input type="submit" value="검색" title="검색(수업용 예약관리 게시물 내)"/></span>
</fieldset>
</form>
</div>
<!--목록영역 -->
<div id="bbs_wrap">
<div class="total">
총 게시물
<strong><c:out value="${paginationInfo.totalRecordCount}"/></strong>건 |
현재 페이지 <strong><c:out value="${paginationInfo.currentPageNo}"/></strong>/
<c:out value="${paginationInfo.totalPageCount}"/>
</div>
<div class="bss_list">
<table class="list_table">
<thead>
<tr>
<th class="num" scope="col">번호</th>
<th class="tit" scope="col">프로그램명</th>
<th scope="col">신청기간</th>
<th scope="col">운영일</th>
<th scope="col">운영시간</th>
<th scope="col">강사명</th>
<th scope="col">신청자</th>
<th scope="col">관리</th>
</tr>
</thead>
<tbody>
<c:forEach var="result" items="${resultList}" varStatus="status">
<tr>
<td class="num"><c:out value="${paginationInfo.totalRecordCount - ((searchVO.pageIndex-1) * searchVO.pageUnit) - (status.count - 1)}"/></td>
<td class="tit">
<c:url var="updateUrl" value="/admin/rsv/rsvRegist.do${_BASE_PARAM}">
<c:param name="resveId" value="${result.resveId}"/>
<c:param name="pageIndex" value="${searchVO.pageIndex}"/>
</c:url>
<a href="${updateUrl}">
<c:out value="${result.resveSj}"/>
</a>
</td>
<td>
<c:out value="${result.reqstBgnde}"/>~<br>
<c:out value="${result.reqstEndde}"/>
</td>
<td>
<c:out value="${result.useBeginDt}"/>~<br>
<c:out value="${result.useEndDt}"/>
</td>
<td><c:out value="${result.useBeginTime}~${result.useEndTime}"/></td>
<td><c:out value="${result.recNm}"/></td>
<td>
<c:url var="applyUrl" value="/admin/rsv/selectApplyList.do${_BASE_PARAM}">
<c:param name="resveId" value="${result.resveId}"/>
<c:param name="pageIndex" value="${searchVO.pageIndex}"/>
</c:url>
<a href="${applyUrl}" class="btn spot">신청자</a>
</td>
<td>
<a href="${updateUrl}" class="btn spot">수정</a>
<br/><br/>
<c:url var="deleteUrl" value="/admin/rsv/rsvDelete.do${_BASE_PARAM}">
<c:param name="resveId" value="${result.resveId}"/>
<c:param name="pageIndex" value="${searchVO.pageIndex}"/>
</c:url>
<a href="${deleteUrl}" class="btn spot btn-del">삭제</a>
</td>
</tr>
</c:forEach>
<!--글이 없을 경우 -->
<c:if test="${fn:length(resultList) == 0}">
<tr class="empty"><td colspan="8">검색 데이터가 없습니다.</td></tr>
</c:if>
</tbody>
</table>
</div>
<div id="paging">
<c:url var="pageUrl" value="/admin/rsv/rsvSelectList.do${_BASE_PARAM}"/>
<c:set var="pagingParam"><c:out value="${pageUrl}"/></c:set>
<ui:pagination paginationInfo="${paginationInfo}" type="image" jsFunction="${pagingParam}"/>
</div>
</div>
<div class="btn-cont ar">
<a href="/admin/rsv/rsvRegist.do" class="btn spot"><i class="ico-check-spot"></i> 등록</a>
</div>
</div>
</div>
</div>
<!-- content 끝 -->
<script>
<c:if test="${not empty message}">
alert("${message}")
</c:if>
//예약글 삭제
$(".btn-del").click(function(){
if(!confirm("삭제하시겠습니까?")){
return false;
}
});
</script>
</body>
</html>
'Coding > 전자정부프레임' 카테고리의 다른 글
사용자예약 프로그램 정보 (0) | 2022.09.28 |
---|---|
3.사용자 예약프로그램 만들기 (0) | 2022.09.21 |
예약관리 (0) | 2022.09.14 |
OAuth 2.0 버전을 이용하여 네이버 로그인해보기 (0) | 2022.09.07 |
회원가입 (0) | 2022.08.17 |