차근차근/Spring

컨트롤러에서 알럿 | controller message alert (1)

예쁜꽃이피었으면 2022. 4. 27. 16:46

새로운 프로젝트를 운영중인데..혼자서 .. 야금야금 수정중이다.. '-' 나 편할라고..

이번에 할 것은.. 

form submit후 데이터 처리가 끝나면 controller에서 메시지를 띄우고 원하는 페이지로 이동 시키는 것.

이 때 메시지는 프로퍼티 파일로 작성해서 공통으로 사용하고 싶다. '-' 설정 건드려보고..안되겠다 싶으면 공통 클래스라도 만들지뭐.

 

구글 검색어 : controller message alert , 자바 프로젝트 message properties


더보기

어떻게 만들어야 할까..

- redirectattributes / addFlashAttribute 사용
- ReloadableResourceBundleMessageSource

일단 생각으로는 

스프링을 쓰고 있으니까..(부트는 아님)

1) 필요하다면 프로퍼티 설정을 추가하고.

2) 내가 쓸 공통 메시지를 프로퍼티 파일에 작성해.

3) 데이터 처리 후 알럿창을 띄우고 싶은 컨트롤러에서 redirectattributes 와 addFlashAttribute를 사용해서 메시지와 이동할 페이지 정보를 넘길거야.

이 때에 나는.. 데이터 처리 후 결과 값에 따라서 케이스를 나누고 리턴값을 다르게 줄건데.

각각에 해당하는 메시지와 redirect경로를 분기처리 할거야. 

 

https://web-obj.tistory.com/455

 

RedirectAttributes(redirect 객체 전달)

redirect 시 데이타를 전달할 수 있는 방법 - RedirectAttributes 클래스를 사용하여 전달할 수 있다. - RedirectAttributes 클래스는 Spring 3.1 버전에 추가되었다고 한다. - redirect시 RedirectAttributes 클..

web-obj.tistory.com

 


//스프링 3.1이상일 때 ReditrctAttributes 사용

//Controller
..
@RequestMapping(value="/test1")
public String test1(HttpServletRequest request, HttpServletResponse response, ReditrctAttributes reAttri){
	String tText = "알럿창 테스트 문구입니다.";
    reAttri.addFlashAttribute("message",tText);
    retrun "redirect:/test2";
}

@RequestMapping(value="/test2")
public String test2(HttpServletRequest request, HttpServletResponse response){
	Map<String,?> Map = RequestContextUtils.getInputFlashMap(request);
    String message = (String)Map.get("message");
    return "/test/test";
}
..

대충 이런 식으로 컨트롤러에서 컨트롤러로 / 컨트롤러에서 jsp로 텍스트를 넘길 수 있는데..

이렇게 되면 결국.. jsp에서 데이터를 받아서 처리하는 부분이 추가되어야 하는게 아닌가 ..싶기도하고..

나는 메시지를 보내고 끝내고 싶은데.. 받는 부분도 작성해야 하고..

흠.. 

그래서 생각한게.. 컨트롤러에서 바로 자바스크립트 코드를 넣어서 알럿창을 띄우는 것과..

https://redcoder.tistory.com/195

jsp상단 공통 파일에 message값이 있으면 띄우게 수정... 흠흠..

https://dev-kmh-note.tistory.com/1

(링크는 나중에 찾아봤는데..이 방법이 최선일까..)

 

https://chaedae.tistory.com/21


1. 안내 문구를 공통으로 관리할거니까 프로퍼티 파일이나 자바 파일 하나 만들거고

컨트롤러에서는 안내문구를 읽어와서 쓸거야.

2. 알럿 뿌리고 페이지 이동시키는 기능만 있는 jsp하나 만들고

3. 컨트롤러에서 안내창이 필요한 경우에 jsp를 호출할거야.

(jsp를 만들어서 호출하게 되면 공통영역에 추가하는 일은 사라짐.)

4. 그러면... redirectattributes / addFlashAttribute  이런 것도 사실 필요없지 않나.. 싶은데 맞나?

5. 그리고 또 든 생각이 굳이 프로퍼티 설정해가면서...만들어야 하나 싶은 생각이 들었다.

그냥 클래스에 문구적고 여기저기 갖다 쓰면 되지 않나.. '-'..어차피 이 사이트는 다국어처리할 필요도 없고..디비 접속정도 아닌데 말이야.. 어떻게 할까..

프로퍼티 파일은 인코딩 문제가 있고 시대착오적인 파일이라는 내용으로 쓰여진 2012년의 글을 읽게 되었다. 

2022년의 나는 왜 아직도 설정파일은 프로퍼티로 만들어야지..라고 생각했지.. '-' 

그렇다면.. 클래스에 적을까.. xml로도 한다는데.. 다시 알아봐야할까..  


jsp에서 controller호출 -> 컨트롤러에서 데이터 처리 후 alert.jsp호출 -> alert.jsp에서 원하는 링크로 이동 

..
@RequestMapping(value="/test")
public String test(HttpServletRequest request, HttpsServletResponse response){
	String testText = "알럿테스트입니다.";
    request.setAttribute("message",testText);
    request.setAttribute("url","/main");
    
    return "/alert";
}

..


alert.jsp는 /WEB-INF	폴더 바로 아래 두었고
<%@page language="java" contextType="text/html; charset=euc-kr" pageEncoding="euc-kr"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="euc-kr">
<title>alertTest</title>
</head>
<body>
	<script type = "text/javascript">
    	var message = "${message}";
        var url = "${url}";
        alert(message);
       	location.href=url;
	</script>
</body>
</html>

변수 testText 는 하고 싶은대로 처리하면되는데 

이 때 문제가 jsp를 부르기 때문에.. 알럿창이 떠 있는 동안에는 

흰 배경만 보인다.. 

당장 생각나는 방법은.. jsp공통파일에서 스크립트만 두거나..........................

자바에서 직접 스크립트를 실행 시키거나(PrintWriter).. 이건 자바 SE6부터 지원되는 기능이라고는 하는데 괜찮은 방법인지 모르겠다.

 

공통파일에 PrintWriter만 둘까 

알럿을 띄웠어 근데. 경우의 수가 많잖아? 알럿확인 후에 페이지 이동을 할 수도 있지만..

알럿창으로 안내하고..그 페이지에 남아있을 수도 있는데..

그 경우에도 이전 데이터가 유지되나..'-'...


jsp에서 controller호출 -> 컨트롤러에서 데이터 처리 후 alert 클래스 -> 공통 클래스에서 알럿띄우고 원하는 페이지로 이동

..
@RequestMapping(value="/test")
public void test(HttpServletRequest request, HttpsServletResponse response){
	String testText = "알럿테스트입니다.";
    String url = "/main";
    
    CommonUtil.Alert(testText,url);
    
    return;
}

..

------------------------------------------------------------------------------------
CommonUtil.java

public static void Alert(String message, String url) throws IOException{

	ServletRequestAttributes servletContainer = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
    HttpServletResponse response = servletContainer.getResponse();
    response.setCharacterEncoding("EUC-KR"); // 알럿창에서 한글 안깨지게 하려고
    response.setContentType("text/html; charset=EUC-kr");

	PrintWriter writer = response.getWriter();
    StringBuffer sb_alert = new StringBuffer();
    sb_alert.append("script type = \"text/javascript\"");
    sb_alert.append("	alert('"+message+"');");
    sb_alert.append("	location.href='"+url+"'");
    sb_alert.append("</script>");
    
    writer.print(sb_alert);
    writer.flush();
    
    return;
}

//복사한게 아니라서 오타 있을 수 있음

 

이렇게 하면 자바에서도 알럿이 뜬다. 그러나 같은 문제가 있다..

배경이 흰색이다.. '-'.하하..

결국..공통파일에 넣는 방법 밖에 없는건가..

 

 

 

 

 

 

 

 

 

반응형