[ajax] 소스

프로그래밍/Web 2009. 8. 19. 01:01 Posted by galad
/**
 * BP설명 이미지, BP브랜드 이미지를 삭제한다.(ajax)
 */
function deleteBpFile(fileType) {
    var mbrNo = document.getElementById("mbrNo").value;

    // 이미지 삭제 링크 숨기기
    if(fileType == "BP_DESC") {
        document.getElementById("deleteBpDesc").style.display = "none";
        //document.getElementById("linkBpDesc").style.display = "none";
    }
    else {
        document.getElementById("deleteBpBrand").style.display = "none";
    }

    var parameter = "mbrNo=" + mbrNo + "&fileType=" + fileType;
    //alert(parameter);

    var req = newXMLHttpRequest();
    req.onreadystatechange=getReadyStateXmlHandler(req, fileDeleted);
    req.open("POST", "${pageContext.request.contextPath}/manage/deleteBpFile.omp", true); // 비동기처리여부
    req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    req.send(parameter);
}

/**
 * ajax 응답(xml)을 받아서 처리
 */
function fileDeleted(xml) {
    var bodyTag = xml.getElementsByTagName("body")[0];
    var typeTag = bodyTag.getElementsByTagName("type")[0];
    //alert(typeTag);
    var type = typeTag.firstChild.nodeValue;
    //alert(type);
    var resultTag = bodyTag.getElementsByTagName("result")[0];
    var result = resultTag.firstChild.nodeValue;

    if(result == "Y") {
        // 파일 링크 지우기
        if(type == "BP_DESC") {
            document.getElementById("linkBpDesc").style.display = "none";
        }
        else {
            document.getElementById("linkBpBrand").style.display = "none";
        }
    }
    else {
        // 파일 삭제 링크 다시 보여주기
        if(type == "BP_DESC") {
            document.getElementById("deleteBpDesc").style.display = "";
        }
        else {
            document.getElementById("deleteBpBrand").style.display = "";
        }
    }
}


// ajax call
<span id="linkBpDesc"><strong><s:a href="%{url}"><s:property value="%{umBpInfo.bpDescImgName}"/></s:a></strong></span>
<span id="deleteBpDesc"><a href="#" onclick="deleteBpFile('BP_DESC'); return false;">이미지 삭제</a></span>

Action & Service
// Action
// BP회원 관련 파일 - BP설명이미지, BP브랜드이미지 파일 삭제
    public String deleteBpFile() {
        log.debug("<< ManageAction.deleteBpFile... >>");
       
        HttpServletRequest request = this.getRequest();
       
        String mbrNo = request.getParameter("mbrNo");
        String fileType = request.getParameter("fileType");
       
        log.debug("mbrNo = " + mbrNo);
        log.debug("fileType = " + fileType);
       
        String xml = this.manageService.deleteBpFile(mbrNo, fileType);
        setInputStream(new ByteArrayInputStream(xml.getBytes()));
       
        return SUCCESS;
    }

// 설정파일
<!-- 파일 삭제 -->
        <action name="deleteBpFile" class="com.omp.bp.cms.manage.action.ManageAction" method="deleteBpFile">
            <result type="stream">
                <param name="inputName">inputStream</param>
                <param name="contentType">text/xml</param>
                <param name="bufferSize">4096</param>
            </result>
        </action>

// Service
// BP추가 파일 삭제 후, 결과를 XML형식으로 반환
    @SuppressWarnings("unchecked")
    public String deleteBpFile(String mbrNo, String fileType) throws ServiceException {
        log.debug("<ManageServiceImpl> deleteBpFile...");
       
        StringBuffer xml = null;
        UserMemberBpInfo umbi = null;
       
        try {
            // DB에서 파일 경로를 얻음
            umbi = this.manageDAO.getMemberBpinfo(mbrNo);
            if(umbi == null) {
                throw new ServiceException("BP추가 파일 삭제 중 BP회원 정보 읽기 실패", "getMemberBpinfo FAIL");
            }
           
            // 파일경로 변경 - 앞에 /data 붙이기
            umbi = DataUtil.makeFilePathFromDB(umbi);
           
            // fileType에 따라 파일 삭제
            if(StringUtils.equalsIgnoreCase(fileType, "BP_DESC")) {
                File f = new File(umbi.getBpDescImgPath());
                if(f.exists() && f.isFile()) {
                    if(!f.delete()) {
                        throw new ServiceException("BP추가 파일 삭제 중 설명 파일 삭제 실패", "delete FAIL");
                    }
                    else {
                        log.debug("BP 설명 물리 파일 삭제");
                       
                        // DB 갱신 - 파일 경로 삭제
                        Map map = new HashMap();
                        map.put("mbrNo", mbrNo);
                        map.put("fileType", fileType);
                        if(!this.manageDAO.deleteBpFile(map)) {
                            throw new ServiceException("BP추가 파일 삭제 중 DB 갱신 실패", "update db FAIL");
                        }
                       
                        log.debug("BP 설명 파일 경로 삭제");
                    }
                }
            }
            else if(StringUtils.equalsIgnoreCase(fileType, "BP_BRAND")) {
                File f = new File(umbi.getBpTbnailImgPath());
                if(f.exists() && f.isFile()) {
                    if(!f.delete()) {
                        throw new ServiceException("BP추가 파일 삭제 중 브랜드 파일 삭제 실패", "delete FAIL");
                    }
                    else {
                        log.debug("BP 브랜드 물리 파일 삭제");
                       
                        // DB 갱신 - 파일 경로 삭제
                        Map map = new HashMap();
                        map.put("mbrNo", mbrNo);
                        map.put("fileType", fileType);
                        if(!this.manageDAO.deleteBpFile(map)) {
                            throw new ServiceException("BP추가 파일 삭제 중 DB 갱신 실패", "update db FAIL");
                        }
                       
                        log.debug("BP 브랜드 파일 경로 삭제");
                       
                    }
                }
            }
           
            // 삭제 결과를 XML로 작성
            xml = makeXmlForDeleteBpFileResult(fileType, true);
        }
        catch(Exception e) {
            log.debug("BP추가 파일 삭제 실패", e);
            xml = makeXmlForDeleteBpFileResult(fileType, false);
        }
       
        return xml.toString();
    }
   
    private StringBuffer makeXmlForDeleteBpFileResult(String fileType, boolean isSucceeded) {
        StringBuffer xml = new StringBuffer();
       
        xml.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
        xml.append("<body>");
            xml.append("<type>");
            xml.append(fileType);
            xml.append("</type>");
            xml.append("<result>");
            xml.append(isSucceeded ? "Y" : "N");
            xml.append("</result>");
        xml.append("</body>");
       
        log.debug("DELETE BP FILE - XML");
        log.debug(xml.toString());
       
        return xml;
    }

의외로 간단하기도 하지만 스크립트쪽 처리가 복잡할 듯.
gmail, google docs 같은 건 정말 어떻게 만든 건지 신기할 뿐..