struts2 result
타입 – chain
오라클자바커뮤니티에서 설립한 오엔제이프로그래밍
실무교육센터
(신입사원채용무료교육, 오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷)
result type chain은 현재 Action과 동일한
ActionInvocation에서 동일한 ActionContext 정보로 다음 Action을 실행한다. 먼저 실행한
Action이 ValueStack에서 먼저 들어가고 나중에 실행한 Action은 다음으로 들어간다.
만약 chain으로 연결되는
Action에서 나중에 실행하는 Action이 먼저 실행한
Action의 Property 값을 알려면
chain으로 연결되는 Action에 chain
인터셉터를 걸어주면 된다.
Result의 type이 chain인 경우 다음과 같은 파라미터의 사용이 가능하다.
actionName(default) :
체인으로 연결할 Action name, default
Property
namespace : Action namespace,
값을 입력하지 않으면
현재의 namespace로 인식
method : Action Method를 지정, 값을 지정하지 않으면 execute
method : Action Method를 지정, 값을 지정하지 않으면 execute
skipActions :
chain으로 연결할
Action의 name을 콤바 리스트로 분리한다.
result type을 chain을
하는 경우의 대표적 예는 회원등록 완료 후 바로 로그인이 가능하도록 구현하는 경우일 것이다. 이러한
경우 회원등록 action의 chain result에
로그인 action을 지정하면 회원등록 후 로그인을 진행하게 된다.
이러한 경우 로그인 Action은 회원등록과 같은
ActionContext를 가지게 되므로 필요한 메모리 정보(세션맵,요청맵 등)는 공유하게 되는 것이다.
위의 경우 최초 실행되는 로그인 Action은
ValueStack의 하단에 들어가고 로그인 Action이
ValueStack의 상단에 위치하는데 ValueStack에 모든 Action이 있으므로 JSP View쪽에서 Property에 접근이 가능하고 이 경우 최상단의 Action부터
검색을 한다. (ValueStack의 구현원리에 대해서는
ValueStack 강좌를 참고 하세요.)
예제를 만들어 보자.
회원정보를 입력하고 submit을 하게되면 회원정보 저장 후 LoginAction을 불러 로그인이 된 이후의 JSP로 보내는
기능을 만들어 보자. 화원정보를 입력하는
Action은 MemberAction이며 로그인 체크를 하는 Action은 로그인 LoginAction 이다.
먼저 실행되는 MemberAction의
Property값을 나중에 실행되는 LoginAction에서 참조하고자 하는 경우
struts.xml의 로그인 action 요소에서 <interceptor-ref name=”chain”/> 이라고 해서
chain 인터셉터를 실행해야 한다.
[개요]
- 사용자 정보를 입력 후
SUBMIT
- MemberAction에서 사용자 정보 저장
후( MebberDAO의 save Method)
LoginAction을 호출
- LoginAction에서는 먼저 실행된 MemberAction의 id, pwd 값을 참조하여 로그인을
시도하고 id가 ‘test’안 경우 로그인
성공으로 SUCCESS를 리턴하여 login_ok.jsp를
리턴한다.
1. LoginAction.java
package chain.action;
import
login.dao.LoginDAO;
import
com.opensymphony.xwork2.Action;
public class LoginAction implements Action
{
String
id;
String
pwd;
public String
execute() throws Exception {
LoginDAO
dao = new LoginDAO();
if
(dao.loginChk(id, pwd)) {
return SUCCESS;
}
else
{
return LOGIN;
}
}
public String
getId() {
return
id;
}
public void
setId(String id) {
this.id
= id;
}
public String
getPwd() {
return
pwd;
}
public void
setPwd(String pwd) {
this.pwd
= pwd;
}
}
2. MemberAction.java
package chain.action;
import
chain.dao.MemberDAO;
import
chain.model.UserInfo;
import
com.opensymphony.xwork2.Action;
import
com.opensymphony.xwork2.ModelDriven;
import
com.opensymphony.xwork2.Preparable;
public class MemberAction implements Action, Preparable,
ModelDriven {
//도메인 오브젝트
UserInfo
userInfo;
public String
execute() throws Exception {
MemberDAO dao = new MemberDAO();
if
(dao.save(userInfo)) {
return SUCCESS;
}
else
{
return LOGIN;
}
}
//Preparable인터페이스의 prepare 구현
public void
prepare() throws Exception {
userInfo
= new UserInfo();
}
//ModelDriven
인터페이스의 getModel 구현
public Object
getModel() {
return
userInfo;
}
}
3. MemberDAO.java
package chain.dao;
import
chain.model.UserInfo;
public class MemberDAO {
public boolean
save(UserInfo userInfo) {
return
true;
}
}
4. UserInfo.java
package chain.model;
public class UserInfo {
private String
id;
private String
pwd;
private String
name;
private String
age;
public String
getId() {
return
id;
}
public void
setId(String id) {
this.id
= id;
}
public String
getPwd() {
return
pwd;
}
public void
setPwd(String pwd) {
this.pwd
= pwd;
}
public String
getName() {
return
name;
}
public void
setName(String name) {
this.name = name;
}
public String
getAge() {
return
age;
}
public void
setAge(String age) {
this.age
= age;
}
}
5. struts.xml
<?xml version="1.0" encoding="UTF-8"
?>
<!DOCTYPE struts
PUBLIC
"-//Apache Software
Foundation//DTD Struts Configuration
2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package
name="struts2"
extends="struts-default">
<action
name="member"
class="chain.action.MemberAction">
<interceptor-ref
name="prepare"/>
<interceptor-ref
name="modelDriven"/>
<interceptor-ref
name="params"/>
<result name="success"
type="chain">
<param
name="actionName">login</param>
</result>
<result
name="login">/login/login.jsp</result>
</action>
<action
name="login"
class="chain.action.LoginAction">
<interceptor-ref
name="chain"/>
<interceptor-ref
name="params"/>
<result
name="success">/login/login_ok.jsp</result>
<result
name="login">/login/login.jsp</result>
</action>
</package>
</struts>
6. /chain/member_input.jsp
<%@ page pageEncoding="euc-kr"
%>
<html>
<body>
<form action="member.action"
method="post">
id : <input
type="text" name="id"><br>
pwd : <input type="text"
name="pwd"><br>
name : <input
type="text" name="name"><br>
age : <input type="text"
name="age"><
<input
type="submit">
</form>
</body>
</html>
7. [실행] http://localhost:8080/result/chain/member_input.jsp
댓글 없음:
댓글 쓰기