Struts2 기반에서 Ajax를 사용해 Json으로 결과값을 받을 때,

같은 메소드가 두 번 호출된다거나, 호출하지 않은 메소드도 막 돌 때가 있다.

이거 참 골치아픈 문제였는데 외국의 어느 형님이 명쾌하게 답변을 내려주셨다.




찬양하여라!!


요는 Json 플러그인은 Action에 get으로 시작하는 메소드를 모조리 읽을 수 있으니 이름 바까라.



출처 : https://stackoverflow.com/questions/6061709/struts2-action-being-called-twice-if-result-type-is-json?answertab=votes#tab-top


Posted by 좀모씨


var xmlHttp;

function srvTime() {

if (window.XMLHttpRequest) {// 분기하지 않으면 IE에서만 작동된다.

xmlHttp = new XMLHttpRequest(); // IE 7.0 이상, 크롬, 파이어폭스 등

xmlHttp.open('HEAD', window.location.href.toString(), false);

xmlHttp.setRequestHeader("Content-Type", "text/html");

xmlHttp.send('');

return xmlHttp.getResponseHeader("Date");

} else if (window.ActiveXObject) {

xmlHttp = new ActiveXObject('Msxml2.XMLHTTP');

xmlHttp.open('HEAD', window.location.href.toString(), false);

xmlHttp.setRequestHeader("Content-Type", "text/html");

xmlHttp.send('');

return xmlHttp.getResponseHeader("Date");

}

}

var st = srvTime();

var date = new Date(st);

var today = date.getFullYear() + addZero(date.getMonth() + 1)

+ addZero(date.getDate());


function addZero(n) {

return n < 10 ? "0" + n : n;

}





Posted by 좀모씨

출처 : http://angeleyes.tistory.com/201


-- div 안이 아닌 전체에서 구하려면 currentObj의 offset을 빼면 된다.


<script language="JavaScript">

<!--


function getMousePosition(evt, currentObj){

var x, y;


if(evt.pageX){

x = evt.pageX - currentObj.offsetLeft;

y = evt.pageY - currentObj.offsetTop;

}

else if (evt.clientX){

x = evt.clientX + document.body.scrollLeft - document.body.clientLeft - currentObj.offsetLeft;

y = evt.clientY + document.body.scrollTop - document.body.clientTop - currentObj.offsetTop;

}


if(document.body.parentElement && document.body.parentElement.clientLeft){

var b = document.body.parentElement;

x += b.scrollLeft - b.clientLeft;

y += b.scrollTop - b.clientTop;

}


alert(x + ',' + y);


return [x,y];

}

// --> 

</script>


<div onclick="getMousePosition(event, this)" style="border:solid 1px black;">

your protected content

<br>

Click here..

</div>



Posted by 좀모씨


http://www.innocia.com/smartPop/


짱조움

Posted by 좀모씨


이번엔 참 웃기는 문제였다.

테이블 데이터를 엑셀로 다운로드 하는데, 특정 검색조건 하에서만 한글이 깨진다....

로컬 테스트시에는 안깨진다. 운영서버에서만 깨진다. 다 깨지는 것도 아니고 특정 조건일 때만!


결국, 헤더 문제였다.


response.setHeader("Content-Disposition", "attachment;filename=" + xls_file_name + ".xls;");

response.setHeader("Content-Description", "JSP Generated Data"); 

response.setContentType("application/vnd.ms-excel;charset=EUC-KR");


이렇게 코딩이 되어 있던 걸


response.setHeader("Content-type", "application/vnd.ms-excel; charset=euc-kr"); 

response.setHeader("Content-Disposition", "attachment;filename=" + xls_file_name + ".xls;");

response.setHeader("Content-Description", "JSP Generated Data");


이렇게 바꾸고,


out.print("<meta http-equiv=\"Content-Type\" content=\"application/vnd.ms-excel; charset=euc-kr\">");


HTML 생성시 맨 윗줄에 meta를 추가해 주었다.

잘 된다.

망할 euc-kr.....



참고. 

http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=qna_function&wr_id=268421&sca=&sfl=wr_subject%7C%7Cwr_content&stx=%BF%A2%BC%BF+%C7%D1%B1%DB&sop=and


http://ggoreb.tistory.com/177

Posted by 좀모씨


역시나 IE는 참 이뻐할 수가 없는 브라우저.

z-index를 주어도 div가 뒤죽박죽 되는 경우가 생긴다.

다른 브라우저는 안그렇다고!


그럴 때는 페이지 맨 윗줄에


<meta http-equiv="X-UA-Compatible" content="IE=edge" /> 


넣어주자.

그냥 해결됨.


일단 IE10에서만 테스트 해봤는데 ... 나머지 혹시 해보실 분들은 피드백 좀.


참고. http://stackoverflow.com/questions/16394848/z-index-in-ie-10




Posted by 좀모씨


http://manggagi.tistory.com/11



이것저것 다 해봐도 도저히 안돼서 골머리 썩다가 엄청난 꼼수를 발견!


두 번 인코딩이라니.


내 경우는 서버쪽에서 두 번 디코딩까지 해서 해결.


한번만 해서는 안되더라고요...

Posted by 좀모씨

========================================
http://aaa.com/a.jsp
========================================
<div class="popup_content">
  <object data="http://bbb.com/b.jsp?gcode=bbb" width="900" height="740" type="text/html" title="bbbb"></object>
</div>

 

 

Posted by 좀모씨

org.apache.commons.fileupload.FileUploadBase$IOFileUploadException: Processing of multipart/form-data request failed. Stream ended unexpectedly

 

apache-commons-fileupload 를 이용해서 파일 업로드 하는데 뜬금없이 떨어진 에러

하루를 꼬박 고생하다가 원인을 알았다.

 

팝업창에서 업로드를 하는데, 용량이 조금 큰 파일들을 업로드 하면 에러가 떨어진 상황.

그런데 파일 용량 제한도 아니고, 도무지 답이 없던 찰나...

 

파일스트림이 서버에 다 기록되기 전에 팝업창을 닫아버린 것.... (  ' ');;;;

아마도 쓰레드 관련 설정 문제인듯 한데....보통은 창이 닫혀도 쓰레드로 돌아가야 정상인데...

 

아하하하....

액션단에서 스트림과 트랜잭션 전부 처리한 후에 메시지를 리턴받아서 jsp 페이지에서 스크립트 처리하는 습관을 들이자. 안그럼 쌩고생한다....

 

 

[ 참고 : http://code.google.com/p/daumopeneditor/issues/detail?id=458 ]

Posted by 좀모씨


뭔가 아주 단순한 실수를 하고 있는 것 같은데, 도무지 모르겠어요.

전자정부프레임워크로 프로젝트를 하고 있는데, 대량의 Text 파일을 라인단위로 파싱해서 DB에 집어넣는 작업을 해야합니다. 기존의 service - DAO로 이어지는 구조하에서는 잘 작동이 되긴 하는데, 화면단에서 500에러가 떨어지더군요. 아마도 트랜잭션 기간때문에 그런듯 합니다. 파일 라인을 줄이면 에러가 안나니까요.

그래서 해당 모듈을 Thread로 구성하려고 했어요. 쓰레드 잘 타고, 파일 잘 읽고, 계산로직 잘 돌아가고..다 잘됩니다. 그런데.. DAO가 SqlMapClient를 못 읽어요. 설정상의 문제는 아닙니다. DAO에서 상위 DAO를 extends하고 Runnable인터페이스를 implement 하는 로직입니다. 누가 좀 알려주세요 제발...-_ㅠ

-- ServiceImpl.java --
@Resource(name = "SoftMngUploadDAO")
private SoftMngUploadDAO uploadDAO;

public void rawDataUpload(StatsVO statsVO, MultipartHttpServletRequest request, HttpServletResponse response) throws Exception {
uploadDAO.rawDataUpload(statsVO, request, response);
}

-- UploadDAO.java --
@Repository("UploadDAO")
public class UploadDAO extends AbstractDAO implements Runnable { 
        public static StatsVO statsVO;
public static MultipartHttpServletRequest request;
public static HttpServletResponse response;

        @Override
public void run() {
Iterator fileIter = request.getFileNames(); 
                MultipartFile mFile = request.getFile((String)fileIter.next());
                fileName = mFile.getOriginalFilename();

                year = fileName.substring(3,7);
month = fileName.substring(7,9);

                .
                .
                .

                Map<String, String> oMap = new HashMap<String, String>();
oMap.put("tradeYr", year);
oMap.put("tradeMonth", month);
getSqlMapClientTemplate().delete("DAO.deleteTradeDataMon", oMap); 
                 // 요기서 에러!!!
                .
                .
                . 
         }

         public synchronized void rawDataUpload(StatsVO vo, MultipartHttpServletRequest req,                                        HttpServletResponse res) throws Exception {
statsVO = vo;
request = req;
response = res;
Thread th = new Thread(new UploadDAO());
th.start();


-- Stat_Sql.xml --
<delete id="DAO.deleteTradeDataMon" parameterClass="java.util.Map">
DELETE FROM STATS 
                         WHERE TRADE_YR = #tradeYr#
                             AND TRADE_MONTH = #tradeMonth#
</delete>

//--> AbstractDAO 에서는 DB컨넥션 정보 갖고 있구요. 아무튼..쓰레드 추가하기 전엔 잘 돌아갔는데;;
         이런 식으로 작업해본 적이 없어서, 아무래도 뭔가 간단한 걸 빼먹거나 간과하고 있는 거 같은데..- _-;; 
Posted by 좀모씨
이전버튼 1 2 이전버튼

블로그 이미지
Under Construction
좀모씨
Yesterday
Today
Total

달력

 « |  » 2024.4
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함