뚜두뚜두
381
2018-11-15 11:52:42
4
1192

요청 처리 후 response 시 return 데이터와 alert


안녕하세요.

controller에서 ajax로 들어온 요청 처리 후에  

제가 작성한 걸로는 return 하기 전에 printwrite 로 alert 을 시켜주고

return 시 데이터를 넘기는 부분에서 오류가 납니다. 

그런데 해당 오류를 찾아보니 getWrite()를 중복해서 사용 할수 없다 ?  

라고 하는데 그러면 다른 해결 방안이 있을까요 ..?

오류 문구는 

java.lang.IllegalStateException: getWriter() has already been called for this response

이렇습니다.


	@PostMapping("/barcodeIn.do")
	@ResponseBody
	public String barcodeIn(wmsInVO inVO, wmsIn entity,Model model,HttpServletResponse response) throws Exception{
		
		//저장 프로시저 호출
		String msg = getProcedureInsert(inVO);
			System.out.println("msg = "+ msg);

		//조회 프로시저 호출
		String json = getProcedureSearch(inVO,entity);
				
		response.setContentType("text/html; charset=UTF-8");
		PrintWriter out = response.getWriter();
		if(msg.equals("-1")) {
			out.println("<script>alert('이미 입고 처리 되었습니다.');</script>");
		}else if(msg .equals("-2")) {
			out.println("<script>alert('입고 처리중 오류입니다.');</script>");
		}else if (msg.equals("-3")) {
			out.println("<script>alert('존재하지 않은 바코드 입니다.');</script>");
			
		}
		out.flush();
		return json;
	}

 자바 에서 @ResponseBody 랑 getWriter() 이랑 충돌이 일어 나는거 같은데 

그럼 저 alert 문구를 띄워 주면서 할수 있는 다른 해결 방안이 있을까요 ?

0
  • 답변 4

  • 포기해..
    1k
    2018-11-15 13:31:05

    return type을 string 말고 map 으로 해서 리턴시키고 화면단에서 스크립트를 작성하세요

  • 뚜두뚜두
    381
    2018-11-15 13:42:16

    봉... /답변 감사드립니다 . 혹시 제가 자바스크립트를 잘 몰라서 그러는데 map으로 보내면 

    ajax 에서 success 시에 데이터를 어떻게 받아서 출력 해야 하는지 알수 있을까요 ...?


         $.ajax({
             type : 'POST',
             url : '/wmsIn/barcodeIn.do',
             data : queryString,
             success : function(data) {
            	 console.log(data); 
            	 var jsData = JSON.parse(data);
            	 console.log(jsData); 
            	 firstGrid.setData(jsData);
            }
         });

     이 상태에서 한개는 그리드에 뿌려 줄꺼고 다른 하나는 alert 를 띄워 주려고 합니다..

  • 포기해..
    1k
    2018-11-15 13:50:03

    Map<String, Object> result = new HashMap<String, Object>();

    String msg = getProcedureInsert(inVO);

    String json = getProcedureSearch(inVO,entity);


    result.put("resultList", json);

    result.put("msgDiv", msg);

    return result;

    이런식으로 map을 리턴해서 ajax 리턴시 값을 확인해보면

    var jsData = JSON.parse(data);

    console.log(jsData);  <---- { resultList:"조회한리스트", msgDiv:"1" } 

    jsData.resultList 이렇게 변수값을 꺼내쓸 수 있습니다.

  • 뚜두뚜두
    381
    2018-11-15 14:04:04
    답변 너무나 감사드립니다. !!
  • 로그인을 하시면 답변을 등록할 수 있습니다.