[3주차] - 게시판 생성 개발실습

코딩하는감자·2021년 6월 3일
post-thumbnail

게시판 메뉴 생성하기

0. 게시판 일련번호 구성 정보

1. DB에 게시판 메뉴 추가

메뉴를 추가하려면 DB에서 COM_MENU, COM_ROLE_MENU, COM_SVC_MENU 테이블을 수정해야 한다.

COM_MENU 테이블에 추가


url 설정

COM_ROLE_MENU 테이블에 추가 (여기서 추가안하고 시스템-사용자관리-권한설정에서 설정할 수 있다.)

COM_SVC_MENU 테이블에 추가

테이블 변경 후 메뉴 확인

메뉴 테이블 수정 후에는 반드시 톰캣 재시작 해야한다 (이클립스에서만 해도 가능)

2. Comtroller, DAO, Mapper, jsp, js 파일 생성

NewBoardController.java, NewBoardService.java 생성

NewBoardDAO.java, NewBoardMapper.xml 생성

nboard_form.js, nboard_list.js 생성

nboard_form.jsp, nboard_list.jsp 생성

3. BOARD

board 테이블 생성

게시글번호, 작성자, 게시판 종류, 제목, 내용, 작성일 순

데이터 생성

4. 검색조건창 수정

게시판 분류 코드 추가

이렇게 할 수 있는데 게시판 말머리 코드가 있어서 기존거 사용하기로 함(CS0050)

5. 코드 작성

NewBoardController.java

package com.seculayer.web.dashboard;

import java.util.Collections;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.commons.configuration.Configuration;
import org.apache.ibatis.session.SqlSession;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import com.seculayer.web.common.ComCode;
import com.seculayer.web.common.Constants;
import com.seculayer.web.common.util.MapUtil;
import com.seculayer.web.dashboard.dao.NewBoardDAO;
import com.seculayer.web.framework.entity.GridResultEntity;
import com.seculayer.web.framework.entity.JsonResultEntity;
import com.seculayer.web.framework.entity.ResultEntityFactory;
import com.seculayer.web.framework.util.TemplateAndPage;

@Controller
@RequestMapping(value = "/dashboard/")
public class NewBoardController {
	
	@Autowired private SqlSession sqlSession;
	@Autowired private NewBoardService svc;
	@Autowired private ComCode comCode;
	@Autowired private Configuration config;
	@Autowired private ResultEntityFactory reFac;
	
	static Logger logger = Logger.getLogger(NewBoardController.class);

	final static String Template = "/common/tpl/default_template";
	final static String PopupTemplate = "/common/tpl/popup_template";
	final static String PartialTemplate = "/common/tpl/partial_template";
	final static String VIEW_MAPPING_PATH = "/dashboard/board/";
	
	@RequestMapping(value = "nboard_list.html")
	public ModelAndView listPage(HttpSession session, @RequestParam Map<String, Object> map) {
		
		ModelAndView mv = TemplateAndPage.getTemplateAndPage(map, VIEW_MAPPING_PATH, "nboard_list");
		
		mv.addObject("groupCds", MapUtil.sortValue(comCode.getCodeMap(svc.GROUP_CODE)));
		return mv;
	}
	
	@RequestMapping(value = "nboard_form.html")
	public ModelAndView formPage(HttpSession session, @RequestParam Map<String, Object> map) {
		
		ModelAndView mv = TemplateAndPage.getTemplateAndPage(map, TemplateAndPage.PARTIAL_TEMPLATE, VIEW_MAPPING_PATH, "nboard_form");
		mv.addObject("page_title", "게시글");
		
		mv.addObject("user_id", session.getAttribute(Constants.USER_ID));
		
		mv.addObject("groupCds", MapUtil.sortValue(comCode.getCodeMap(svc.GROUP_CODE)));
		mv.addObject("loginMenuIds", comCode.getCodeMap("BB0001"));
		
		mv.addObject("userIpRestrictYn", config.getBoolean("user_ip_restrict") ? "Y" : "N");
		mv.addObject("multipleManagerRoleYn", config.getBoolean("multiple_manager_role") ? "Y" : "N");
		
		mv.addObject("groupComCode", svc.GROUP_CODE);
		
		return mv;
	}
	
	@RequestMapping(value = "nboard_list.json")
	public @ResponseBody GridResultEntity getList(HttpSession session, @RequestParam Map<String,Object> map) {
		NewBoardDAO dao = sqlSession.getMapper(NewBoardDAO.class);
		
		int listCount = dao.selectNewBoardListCount(map);
		
		List<Map<String, Object>> list = Collections.emptyList();
		if (listCount > 0) {
			list = dao.selectNewBoardList(map);
		}
		
		return new GridResultEntity(listCount, list);
	}
	
	@RequestMapping(value = "nboard.json")
	public @ResponseBody JsonResultEntity get(@RequestBody Map<String, Object> map) {
		return reFac.getJsonResultEntity(svc.select(map));
	}
	
	@RequestMapping(value = "nboard_insert.do")
	public @ResponseBody JsonResultEntity insert(HttpSession session, @RequestBody Map<String, Object> map) {
		svc.insert(map);
			
		return reFac.getJsonResultEntityFromResultCd("SUC.COM.0001");
	}

	@RequestMapping(value = "nboard_update.do")
	public @ResponseBody JsonResultEntity update(HttpSession session, @RequestBody Map<String, Object> map) {
		svc.update(map);
		
		return reFac.getJsonResultEntityFromResultCd("SUC.COM.0002");
	}
	
	@RequestMapping(value = "nboard_delete.do")
	public @ResponseBody JsonResultEntity delete(HttpSession session, @RequestBody Map<String, Object> map) {
		svc.delete(map);
		
		return reFac.getJsonResultEntityFromResultCd("SUC.COM.0003");
	}
	
}

NewBoardService.java

package com.seculayer.web.dashboard;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.apache.commons.configuration.Configuration;
import org.apache.ibatis.session.SqlSession;
import org.apache.log4j.Logger;

import com.seculayer.web.common.ComCode;
import com.seculayer.web.dashboard.dao.NewBoardDAO;

@Service
public class NewBoardService
{
	@Autowired SqlSession sqlSession;
	@Autowired Configuration config;
	@Autowired ComCode comCode;
	
	static String GROUP_CODE = "BB0001";		

	static Logger logger = Logger.getLogger(NewBoardService.class);
	
	Map<String,Object> select(Map<String,Object> param) {
		NewBoardDAO dao = sqlSession.getMapper(NewBoardDAO.class);
		
		Map<String, Object> data = dao.selectNewBoard(param);
		
		return data;
	}
	
	@Transactional(rollbackFor=Exception.class)
	public int insert(Map<String, Object> param) {
		NewBoardDAO dao = sqlSession.getMapper(NewBoardDAO.class);
		
		int cnt = dao.insertNewBoard(param);
		
		return cnt;
	}
	
	@Transactional(rollbackFor=Exception.class)
	public int update(Map<String, Object> param) {
		
		NewBoardDAO dao = sqlSession.getMapper(NewBoardDAO.class);
		
		// 감사정보 (수정전 게시글정보)
		Map<String,Object> old = dao.selectNewBoard(param);

		int cnt = dao.updateNewBoard(param);
		
		return cnt;
	}
	
	int delete(Map<String, Object> param) {
		
		NewBoardDAO dao = sqlSession.getMapper(NewBoardDAO.class);
		
		// 감사정보 (삭제전 게시글정보)
		Map<String,Object> old = dao.selectNewBoard(param);
		
		int cnt = dao.deleteNewBoard(param);
		
		return cnt;
	}
	
}

NewBoardDAO.java

package com.seculayer.web.dashboard.dao;

import java.util.List;
import java.util.Map;

public interface NewBoardDAO {
	//------------------------------------------------------------
	// Dash Board
	//------------------------------------------------------------
	public int selectNewBoardListCount(Map<String, Object> map);

	public List<Map<String, Object>> selectNewBoardList(Map<String, Object> map);

	public Map<String, Object> selectNewBoard(Map<String, Object> param);

	public Map<String, Object> selectBoard(Map<String, Object> param);

	public int updateNewBoard(Map<String, Object> param);

	public int deleteNewBoard(Map<String, Object> param);

	public int insertNewBoard(Map<String, Object> param);
}

NewBoardMapper.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="com.seculayer.web.dashboard.dao.NewBoardDAO">

	<!-- ########## Board START ########## -->
	<select id="selectNewBoardListCount" resultType="int">
        SELECT
            COUNT(*)
        FROM BOARD
        <where>
            <if test="login_user_ids != null and login_user_ids.size > 0 ">
                AND user_id IN (
                <foreach item="login_id" collection="login_user_ids" separator=",">
                    #{login_id}
                </foreach>
                )
            </if>
            <if test="s_user_id != null and s_user_id != ''">
            AND user_id LIKE CONCAT('%',#{s_user_id},'%')   
            </if>
            <if test="s_b_subject != null and s_b_subject != ''">
            AND b_subject LIKE CONCAT('%',#{s_b_subject},'%')
            </if>
            <if test="s_b_cont != null and s_b_cont != ''">
            AND b_cont LIKE CONCAT('%',#{s_b_cont},'%')   
            </if>
            <if test="s_group_cd != null and s_group_cd != ''">
            AND b_type = #{s_group_cd}
            </if>
        </where>
    </select>
    
    <select id="selectNewBoardList" resultType="map">
        SELECT
            b_seq,
            CASE b_type WHEN 1 THEN '공지' ELSE '질문' END AS b_type,
            b_subject,
            b_cont,
            user_id,
            DATE_FORMAT(STR_TO_DATE(reg_dt, '%Y%m%d%H%i%s'), '%Y-%m-%d %H:%i:%s') as reg_dt
        FROM 
            BOARD
        <where>
            <if test="login_user_ids != null and login_user_ids.size > 0 ">
                AND user_id IN (
                <foreach item="login_id" collection="login_user_ids" separator=",">
                    #{login_id}
                </foreach>
                )
            </if>
            <if test="s_user_id != null and s_user_id != ''">
            AND user_id LIKE CONCAT('%',#{s_user_id},'%')   
            </if>
            <if test="s_b_subject != null and s_b_subject != ''">
            AND b_subject LIKE CONCAT('%',#{s_b_subject},'%')
            </if>
            <if test="s_b_cont != null and s_b_cont != ''">
            AND b_cont LIKE CONCAT('%',#{s_b_cont},'%')   
            </if>
            <if test="s_group_cd != null and s_group_cd != ''">
            AND b_type = #{s_group_cd}
            </if>
        </where>
    </select>
    
    <select id="selectNewBoard" resultType="map">
         SELECT
            b_seq,
            b_type,
            b_subject,
            b_cont,
            user_id,
            DATE_FORMAT(STR_TO_DATE(reg_dt, '%Y%m%d%H%i%s'), '%Y-%m-%d %H:%i:%s') as reg_dt
        FROM 
            BOARD
        WHERE 
            b_seq = #{b_seq}
    </select>
    
    <update id="updateNewBoard" parameterType="map">
        UPDATE 
            BOARD SET 
            b_subject = #{b_subject},
            b_cont = #{b_cont}
        WHERE
            b_seq = #{b_seq}
    </update>
    
    <delete id="deleteNewBoard" parameterType="map">
        DELETE FROM 
            BOARD
        WHERE
            b_seq = #{b_seq}
    </delete>
    
    <insert id="insertNewBoard" parameterType="map">
        INSERT INTO BOARD (
            user_id,
            b_type,
            b_subject,
            b_cont,
            reg_dt
        )
        VALUES (
            #{user_id},
            #{b_type},
            #{b_subject},
            #{b_cont},
            DATE_FORMAT(NOW(),'%Y%m%d%H%i%S')
        )
    </insert>
</mapper>

nboard_list.jsp

<%@ page contentType="text/html; charset=utf-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://www.springframework.org/tags" prefix="spring"%>

<div class="section-search-cols">
	<h3><spring:message code="LBL.COM.0007"/></h3>

	<form id="searchBoardList">
		<input type="hidden" name="slKey" value="<c:out value="${_slKey}"/>">
		<span class="form-label">작성자(아이디)</span>
		<div class="forms-group">
			<input type="text" name="s_user_id" value="<c:out value="${param.s_user_id}" />" class="form-input">
		</div>

		<span class="form-label">제목</span>
		<div class="forms-group">
			<input type="text" name="s_b_subject" value="<c:out value="${param.s_b_subject}" />" class="form-input">
		</div>

        <span class="form-label">내용</span>
        <div class="forms-group">
            <input type="text" name="s_b_cont" value="<c:out value="${param.s_b_cont}" />" class="form-input">
        </div>
        
		<span class="form-label">말머리</span>
		<div class="forms-group">
			<select name="s_group_cd" class="form-select">
				<option value=""><spring:message code="SEL.COM.0002"/></option>
				<c:forEach var="map" items="${groupCds}" >
					<option value="${map.key}" ${map.key == param.s_group_cd?"selected":""}><c:out value="${map.value}" /></option>
				</c:forEach>
			</select>
		</div>

		<button type="button" class="form-submit"><spring:message code="BTN.COM.0007"/></button>
	</form>
</div><!-- / .section-search-cols -->

<div class="section-content">

	<!-- grid -->
	<div class="grid-group">
		<div id="gridBoardList"></div>
	</div>

	<div class="grid-bottom">
		<div class="put-right">
			<button type="button" class="btn-basic btn-add"><spring:message code="BTN.COM.0017"/></button>
		</div>
	</div>
	<!-- / grid -->

</div><!-- / .section-content -->

<script src="<c:url value="/resources/app/dashboard/board/nboard_list.js" />"></script>

nboard_list.js

'use strict';


_SL.nmspc("board").list = function() {

	var
	mCfg = {
		urlList : gCONTEXT_PATH + 'dashboard/nboard_list.json',
		urlForm : gCONTEXT_PATH + 'dashboard/nboard_form.html',
		formId : '#searchBoardList',
		gridId : '#gridBoardList'
	},
	
	m$ = {
		form : $(mCfg.formId),
		grid : $(mCfg.gridId)
	},

	ctrlCookie = new slui.cookies(),

	init = function() {
		ctrlCookie.init(mCfg.gridId);
		
		var $btnAdd = m$.grid.parent().siblings('.grid-bottom').find('.btn-add');
		m$.form.find('[name=s_group_cd]').chosen({search_contains : true, width:'100%'});


		// 초기 화면 구성
		drawGrid(m$.grid);

		// 이벤트 설정
		m$.form.find('.form-submit').off().on('click',function(){
			m$.grid.jqxGrid('gotopage', 0);
			refresh();
		});
		
		//Keypress
		m$.form.find(".form-input").keypress(function(e) {

			if (e.keyCode == 13) {
				m$.grid.jqxGrid('gotopage', 0);
				refresh();
			}
		});

		$btnAdd.off().on('click',function(){
			viewDetail(mCfg.urlForm);
		});
	},

	drawGrid = function($grid){
		var gridSource = {
			datatype: "json",
			datafields: [
				{ name: "b_seq", type: "string"},
				{ name: "user_id", type: "string"},
				{ name: "b_type", type: "string"},
				{ name: "b_subject", type:"string"},
				{ name: "b_cont", type:"string"},
				{ name: "reg_dt", type: "string"}
			],
			root: 'rows',
			beforeprocessing: function(data){
				if (data != null){
					gridSource.totalrecords = data.totalRows;
				}
			},

			cache: false,
			url: mCfg.urlList
		},

		dataadapter = new $.jqx.dataAdapter(gridSource, {
			beforeLoadComplete: function(rows) {
				for (var i in rows) {
					 rows[i].reg_dt = _SL.formatLcDate(rows[i].reg_dt, 'yyyyMMddHHmmss', _SL.formatDate.getLcPattern("ymdhms"));
				}
				return rows;
			},
			formatData : function(data) {
				var params = {}, param, flds = $(mCfg.formId).serializeArray();
				for(param in flds) {
					params[flds[param].name] = flds[param].value;
				};
				$.extend(data, params);
				
				return data;
			},
			loadError: function(xhr, status, error){
				alert(error);
			}
		});

		$grid.jqxGrid({
			keyboardnavigation: false,
			enablebrowserselection: true,
			source: dataadapter,
			width: '100%',
			pagesize: ctrlCookie.getValue(),
			virtualmode: true,
			rendergridrows: function(obj){
				return obj.data;
			},
			columns: [
				{
					text: 'No', columntype: 'number', width:40, cellsalign:'center',
					cellsrenderer: function (row, column, value, defaulthtml) {
						return $(defaulthtml).text(value + 1)[0].outerHTML;
					}
				},
				{ text: "말머리", datafield: 'b_type', width:'10%'},
				{ text: "제목", datafield: 'b_subject', width:'20%',
					cellsrenderer: function(row, column, value, defaulthtml, columnproperties, rowdata){
						return $(defaulthtml).html('<button type="button" style="position: absolute; left: 27px;" class="btn-link">' + value + '</button>')[0].outerHTML;
					}
				},
				{ text: "내용", datafield: 'b_cont', width:'40%'},
				{ text: "작성자(아이디)", datafield: 'user_id', width:'10%'},
				{ text: "작성일", datafield: 'reg_dt', cellsalign:'center'}
			]
		});
	
		$grid.on("cellclick", function (event){
			if(event.args.datafield === 'b_subject'){
				var bseq = event.args.row.bounddata.b_seq;
				viewDetail(mCfg.urlForm +'?b_seq='+bseq);
			}
		});

		ctrlCookie.changeEvent();
	},

	refresh = function() {
		m$.grid.jqxGrid("updatebounddata");
	},

	viewDetail = function(url){
		var modal = new ModalPopup(url, {
			height: 650,
			onClose : function(){
				refresh();
			}
		});
	};
	
	return {
		init : init
	};

}();

$(function(){
	slapp.board.list.init();
	
});

nboard_form.jsp

<%@ page contentType="text/html; charset=utf-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://www.springframework.org/tags" prefix="spring"%>
<script>
	gSessionUserId = "${sessionScope.USER_ID}";	
	gMultipleManagerRoleYn = "${multipleManagerRoleYn}";
	gUserIpRestrictYn = "${userIpRestrictYn}";	
</script>

<style>
.user-imgupload-text {
	top:45%;
	position:relative;
	left:15%;
	color:#E2E2E2;
}
</style>

<div class="section-content no-search-cols">

	<form name="formBoardDetail" id="formBoardDetail">
		<input type="hidden" name="slKey" value="<c:out value="${_slKey}" />">
		<input type="hidden" name="b_seq" value="${param.b_seq}">
		<table class="table-group">
		    <tr>
                <th scope="row"><span class="mark-required">말머리 </span></th>
                <td colspan="2">
                    <div class="ranges-group"><div class="range-3"> 
                    <div class="form-select-outer">
                    <select name="b_type" class="form-select">
		                <option value=""><spring:message code="SEL.COM.0002"/></option>
	                    <option value="1" ${b_type == 1 ? "selected":""}>공지</option>
	                    <option value="2" ${b_type == 2 ? "selected":""}>질문</option>
		            </select>
                    </div>
                    </div></div>
                    <%-- <a class="btn_sml" href="javascript:_SL.popupCodeList('${groupComCode}');"><span>등록</span></a> --%>
                </td>
            </tr>
			<tr>
				<th scope="row"><span>작성자(아이디)</span></th>
				<td>
					<div class="ranges-group"><div class="range-10">
						<input type="text" name="user_id" value="${user_id}" class="form-input form-text" readonly="readonly">
					</div></div>
				</td>
			</tr>
            <tr class="regdt">
                <th scope="row"><span>작성일</span></th>
                <td>
                    <div class="ranges-group"><div class="range-10">
                        <input type="text" name="reg_dt" class="form-input form-text" readonly="readonly">
                    </div></div>
                </td>
            </tr>
            <tr>
                <th scope="row">제목</th>
                <td colspan="2">
                    <div class="ranges-group"><div class="range-6">
                        <input type="text" name="b_subject" class="form-input" maxlength="100" data-valid="minLen=1,maxLen=254">
                    </div></div>
                </td>
            </tr>
			<tr>
				<th scope="row">내용</th>
				<td colspan="2">
					<div class="ranges-group"><div class="range-6">
						<textarea name="b_cont" class="form-input" maxlength="1000" style="margin: 0px; width: 447px; height: 406px; resize: none;" data-valid="minLen=1,maxLen=16777215"></textarea>
					</div></div>
				</td>
			</tr>
			
		</table>
	
		<div class="table-bottom">
			<button type="button" class="btn-basic btn-save" data-after-close="true"><spring:message code="BTN.COM.0005"/></button>
			<button type="button" class="btn-basic btn-delete" data-after-close="true"><spring:message code="BTN.COM.0003"/></button>
			<button type="button" class="btn-basic btn-cancel" data-layer-close="true"><spring:message code="BTN.COM.0014"/></button>
		</div>
	
	</form>

</div>
<script type="text/javascript" src="<c:url value="/resources/js/jq_plugin/jquery.form.js" />" charset="utf-8"></script>
<script type="text/javascript" src = "<c:url value="/resources/js/jq_plugin/jquery.MultiFile.js" />"></script>
<script src="<c:url value="/resources/app/dashboard/board/nboard_form.js" />"></script>

nboard_form.js


//# sourceURL=nboard_form.js
'use strict';


_SL.nmspc("board").form = function(){

	var
	// Config 정의
	mCfg = {
		formId : '#formBoardDetail',
		urlSelect : gCONTEXT_PATH + "dashboard/nboard.json",
		urlDelete : gCONTEXT_PATH + "dashboard/nboard_delete.do",
		add : {
			action : gCONTEXT_PATH + "dashboard/nboard_insert.do",
			message : _SL.getMessage("CNF.COM.0006"),
		},
		update : {
			action : gCONTEXT_PATH + "dashboard/nboard_update.do",
			message : _SL.getMessage("CNF.COM.0002"),
		}
	},
	
	// JQuery 객체 변수
	m$ = {
		form : $(mCfg.formId),
		b_seq		: $(mCfg.formId + ' [name=b_seq]'),
		userId		: $(mCfg.formId + ' [name=user_id]'),
		
		slKeyId : $(mCfg.formId + ' [name=slKey]')
	},
	
	// 현재 상태 변수
	mState = {
		isNew : m$.b_seq.val() == "" ? true : false,
		mode : m$.b_seq.val() == "" ? mCfg.add : mCfg.update
	},
	
	init = function(){
		
		// 이벤트 Binding
		bindEvent();
		
		// DOM 설정 Start
		if(mState.isNew) {
			m$.form.find(".btn-delete").hide();
			m$.form.find(".regdt").hide();
		}
		else {
			m$.form.find(".btn-delete").show();
			m$.userId.addClass("form-text").attr("readonly", "readonly");
		}
		
		// 데이타 조회
		if(!mState.isNew) select();
		
		m$.form.find(".form-input").keypress(function(e) {
			if (e.keyCode == 13) {
				onSave();
			}
		});
		
	},
	
	bindEvent = function() {
		// SAVE
		m$.form.find('.btn-save').on('click', onSave);
		
		// DELETE
		m$.form.find('.btn-delete').on("click", onDelete);		
		
	},
	
	select = function() {
		var
			bseq = m$.b_seq.val(),
			rqData = {'b_seq': bseq},
			
			callback = function(data){
			
			_SL.setDataToForm(data, m$.form);

			slui.attach.setTransformSelect(mCfg.formId);
		};
		
		$('body').requestData(mCfg.urlSelect, rqData, {callback : callback});
	},
	
	onSave = function(){
		var afterClose = $(this).data('after-close') == true ? true : false;
		
		if (!_SL.validate()) return;
		
		var submit = function(){
			$('body').requestData(mState.mode.action, _SL.serializeMap(m$.form), {
				displayLoader : true,
				callback : function(rsData, rsCd, rsMsg){
					
					_alert(rsMsg, {
						onAgree : function(){
							onClose(true);
						}
					});
				}
			});
		}
		
		if(mState.isNew) {
			submit();
		}
		else {
			_confirm(mState.mode.message,{
				onAgree : function(){
					submit();
				}
			});
		}
	},

	onDelete = function(){
		var afterClose = $(this).data('after-close') == true ? true : false;
		
		_confirm(_SL.getMessage("CNF.COM.0003"),{
			onAgree : function(){
				var bseq = m$.b_seq.val();

				//삭제되는 b_seq 값 전송
				$('body').requestData(mCfg.urlDelete, {b_seq: bseq, slKey:m$.slKeyId.val()},
					{callback: function(rsData, rsCd, rsMsg){
						_alert(rsMsg, {
							onAgree : function() {
								onClose(afterClose);
							}
						});
					}}
				);
			}
		});
	},
	
	onClose = function(afterClose){
		if(afterClose){
			m$.form.find("[data-layer-close=true]").click();
		}
	};

	return {
		init: init
	};

}();

$(function(){
	slapp.board.form.init();
});

6. 결과 화면

기본 조회

검색 (아이디,제목,내용,말머리)

상세조회 (수정, 삭제)

추가

profile
나는 말하는 감자다

0개의 댓글