게시판 그룹 쓰기/수정은 게시판 새 글 쓰기/수정과 동일하다.

사용자가 입력한 값을 받아서

새 번호(그룹 - bgno)를 부여하고 INSERT 문을 실행하거나

그룹 번호가 있으면 UPDATE문으로 수정하면 된다.

다만, 댓글처럼 Ajax로 처리하기 때문에

JavaScript가 많이 사용된다.

더욱이 HTML Radio를 사용하면서

작성해야 하는 코드가 조금 더 많아져 복잡해 보인다.


다음 코드를 보면 일반적인 Ajax 사용과 같다.

function fn_groupSave(){
    if($("#bgname").val() == ""){
        alert("게시판 이름을 입력해주세요.");
        return;
    }
    var bgno =null;
    if (selectedNode!=null) bgno =selectedNode.data.key;

    if (!confirm("저장하시겠습니까?")) return;

    $.ajax({
        url: "boardGroupSave",
        cache: false,
        type: "POST",
        data: { bgno:$("#bgno").val(), bgname:$("#bgname").val(), bgparent: bgno,
                bgused : $("input:radio[name=bgused]:checked").val(),
                bgreadonly : $("input:radio[name=bgreadonly]:checked").val(),
                bgreply : $("input:radio[name=bgreply]:checked").val()}       
    }).done(receiveData4Save);

BoardGroupList.jsp

selectedNode는 트리의 노드가 선택되면 발생하는 이벤트(onActivate)에서

선택된 노드를 가지고 있도록 한 전역변수이다.

따라서, selectedNode에 값이 있으면

게시판 그룹 수정이고(bgno 값 존재), 없으면 신규가 된다.

사용자가 노드를 선택하면

선택한 노드가 selectedNode에 지정되고

입력상자(input)의 ID가 bgno에도 값이 저장된다.

저장할 데이터를 구성하여 boardGroupSave를 호출하면

게시판과 유사한 다음 SQL문으로 저장하게 된다.


<insert id="insertBoardGroup" parameterType="gu.board9.BoardGroupVO" >
    <selectKey resultType="String" keyProperty="bgno" order="BEFORE">
        SELECT IFNULL(MAX(BGNO),0)+1 FROM TBL_BOARDGROUP
    </selectKey>   
    INSERT INTO TBL_BOARDGROUP(BGNO, BGNAME, BGUSED, BGREPLY, BGREADONLY, BGPARENT, BGDELETEFLAG, BGDATE)
    VALUES (#{bgno}, #{bgname}, #{bgused}, #{bgreply}, #{bgreadonly}, #{bgparent}, 'N', NOW() )
</insert>


<update id="updateBoardGroup" parameterType="gu.board9.BoardGroupVO">
    UPDATE TBL_BOARDGROUP
       SET BGNAME=#{bgname}, BGUSED=#{bgused}, BGREPLY=#{bgreply}, BGREADONLY=#{bgreadonly}
     WHERE BGNO=#{bgno}
</update>  

board9.xml

SQL문은 별도의 이름을 부여했지만

서비스(DTO)의 이름은 게시판 글쓰기/수정과 이름이 같다(insertBoard).

insertBoard에서는 게시판과 같이 그룹번호(bgno) 값이

없으면 신규 등록 (INSERT)

있으면 수정(UPDATE)을 실행한다.

    public void insertBoard(BoardGroupVO param){
        if ("".equals(param.getBgparent())) param.setBgparent(null);
           
        if (param.getBgno()==null || "".equals(param.getBgno()))
             sqlSession.insert("insertBoardGroup", param);
        else sqlSession.insert("updateBoardGroup", param);
    } 

BoardGroupSvc.java

이렇게 처리한 뒤 컨드롤(boardGroupSave)에서는

Json 형태(ObjectMapper)로 저장한 그룹 정보를 반환한다(bgInfo).

신규일경우는 MyBatis가 글번호를 반환 받아서 bgInfo에 저장해서 반환한다(selectKey).

     @RequestMapping(value = "/boardGroupSave")
       public void boardSave(HttpServletResponse response, BoardGroupVO bgInfo){
        
        boardSvc.insertBoard(bgInfo);
        
        ObjectMapper mapper = new ObjectMapper();
        response.setContentType("application/json;charset=UTF-8");
        
        try {
            response.getWriter().print( mapper.writeValueAsString(bgInfo));
        } catch (IOException ex) {
             System.out.println("오류: 게시판 그룹에 문제가 발생했습니다.");
        }
    }

BoardGroupCtr.java

컨트롤이 반환한 정보(bgInfo)는

클라이언트에서 Ajax 호출시 지정된 receiveData4Save 함수에 파라메타(data)로 넘겨 진다.

선택된 노드(selectedNode)가 있거나(!==null),

선택된 노드의 수정이면(선택된 노드와 반환된 데이터의 키 값이 같으면)

선택된 노드의 제목이 수정될수 있어서 무조건 수정해준다.

IF문 처리를 해도 되지만 간단한 데이터 변경이라 무조건 하도록 했다.

function receiveData4Save(data){
    if (selectedNode!==null && selectedNode.data.key===data.bgno) {
        selectedNode.data.title=data.bgname;
        selectedNode.render();
    } else {
        addNode(data.bgno, data.bgname);
    }
   
    alert("저장되었습니다.");

BoardGroupList.jsp

수정이 아닌 경우

즉, 최상위 노드에 추가(선택 노드 없음, selectedNode===null)하거나

선택노드의 자식 노드를 추가할 경우

(선택노드와 반환된 데이터 키 값이 다르면, selectedNode.data.key!==data.bgno)

새로운 노드를 생성해서 추가해 준다 (addNode).


addNode함수의 내용은 다음과 같다.

dynatree의 사용법으로 별도의 설명을 하지 않으니 찾아보길 바라고

선탠된 노드($("#tree").dynatree("getActiveNode"))가 있으면

자식으로 추가하고

없으면 최상위($("#tree").dynatree("getRoot"))에 추가한다.

function addNode(nodeNo, nodeTitle){
    var node = $("#tree").dynatree("getActiveNode");
    if (!node) node = $("#tree").dynatree("getRoot");
    var childNode = node.addChild({key: nodeNo, title: nodeTitle});
    node.expand() ;
    node.data.isFolder=true;
    node.tree.redraw();

BoardGroupList.jsp










'Java > 게시판 9: 멀티 & 관리' 카테고리의 다른 글

1. 멀티게시판 관리자(그룹) 준비  (2) 2016.08.14
2. 게시판 그룹 리스트  (2) 2016.08.14
3. 게시판 그룹 읽기 / 삭제  (0) 2016.08.14
5. 게시판 적용  (0) 2016.08.14

+ Recent posts