728x90
#. Class file source
public class SendEmailAction extends ActionSupport {
........
private String statusFlag = null; // 처리 결과
private String altMessage = null; // 사용자에게 보여줄 결과 메시지
@Override
public String execute() throws Exception {
try{
........
}catch (Exception e) {
e.printStackTrace();
setStatusFlag(ERROR);
setAltMessage(getText("mail.message.error")); // xx.properties 파일에 있는 값 가져와서 넣기
return ERROR;
}
setStatusFlag(SUCCESS);
//setAltMessage("메일이 성공적으로 전송되었습니다. 빠른 시일 내에 연락드리겠습니다.");
setAltMessage(getText("mail.message.success"));
return SUCCESS;
}
......
public String getStatusFlag() {
return statusFlag;
}
public void setStatusFlag(String statusFlag) {
this.statusFlag = statusFlag;
}
public String getAltMessage() {
return altMessage;
}
public void setAltMessage(String altMessage) {
this.altMessage = altMessage;
}
}
#. struts.xml
....
<action name="send.email" class="com.prompt.eclix.mail.SendEmailAction" method="execute">
<result>/WEB-INF/jsp/controller.jsp</result>
</action>
.....
원칙적으로 한다면 페이지 분기를 Struts.xml 에서 <result> 태그의 "name" 속성으로 구분하여야 할 것이다. 그런데 그렇게 했을 경우 문제가 발생 했다.
페이지 이동은 설정해 준대로 이동하지만, URL 창에는 submit() 넘어 갈 때의 주소가 그대로 남아 있기 때문에 이중 submit() 이 일어나는 것이다.
1. struts 2가 제공해 준다는 이중 submit() 을 방지 Token interceptor 적용을 생각해 볼 수 있다. 이건 아직 시도해 보지 않았다.
2. <result> 태그의 name 속성으로 구분해서 페이지 이동과 동시에 URL까지 이동하게 해주는 Type 속성 "redirectAction" 값을 이용할 수 있다.
그런데 이 경우, 위 코드처럼, 호출된 .jsp 페이지에서 request.getAttribute("altMessage") 로 Action 클래스에서 설정한 메세지를 바로 가져 올 수 없었다.
여기에서 또 두 가지 가능성으로 나뉜다.
1) jsp 페이지에서 바로 메시지를 하드코딩해서 박아준다.
- 한글이 깨져서 출력된다.
2) <s:text> 라이브러리 태그로 Resource 파일에 있는 메시지를 불러온다.
- Resource 파일이 유니코드로 저장되지 않았을 경우, 역시 한글이 깨진다.
(추후, 이클립스에 .properties 파일 에디터 관련 글 게시 예정)
따라서, 내가 선택한 궁여 지책.
3. 다음과 같이 중간 호출 .jsp 페이지를 만들어서 Action 클래스에서 설정한 메세지 뿌려주고 페이지를 분기한다.
#. /WEB-INF/jsp/controll.jsp
<script language="javascript">
var v_flag =
'<%=request.getAttribute("statusFlag")==null?"":(String)request.getAttribute("statusFlag")%>';
var v_altMessage=
'<%=request.getAttribute("altMessage")==null?"":(String)request.getAttribute("altMessage")%>';
if(v_flag == 'error'){
alert(v_altMessage);
location.href="/open.email.action";
}else if( v_flag == 'success'){
alert(v_altMessage);
location.href="/main.action";
}else{
}
</script>
이렇게 해서 결과 메세지를 뿌려주고, URL 주소를 변경시키면서 페이지를 이동시킬 수 있었다.
다음엔, Token Interceptor 를 활용해 보도록 해야할텐데... 큭.
'Dev > Framework' 카테고리의 다른 글
다국어 Message Resource 브라우져 언어 / 파라미터 처리 설정 #2 (0) | 2013.06.10 |
---|---|
다국어 Message Resource 브라우져 언어 / 파라미터 처리 설정 (0) | 2013.05.16 |
<s:form> 태그 <form> 태그로 변환 되었을 때의 id 속성 값의 변화 (0) | 2010.12.23 |
사용자에게 서버 메시지 뿌리는 방법 중 하나 (0) | 2010.12.08 |
[Struts2] 최초 프로젝트 구성 (0) | 2010.12.05 |