Struts2 인터셉터(initerceptor) – workflow
workflow인터셉터는 Action이 Validatable인터페이스를 구현했다면 Action의 validate()메소드를 호출한다.
Struts2 인터셉터(initerceptor) – prepare
prepare인터셉터는 com.opensymphony.xwork2.Preparable인터페이스를 구현한 Action의 prepare() 메소드를 실행 하는데 이 인터셉터는 Action을 실행하기 전에 다른 메소드를 실행 시킬 때 유용하게 사용될 수 있다
struts2 인터셉터(initerceptor) – staticParams
즉 staticParams Interceptor에서 세팅하는 값은 default value의 성격을 갖게 된다.
struts2 인터셉터(initerceptor) – checkbox
Struts2의 checkbox인터셉터는 체크하지 않은 checkbox에 대해 기본값을 지정해서 파라미터로 사용가능 하도록 지원한다. Checkbox 인터셉터의 uncheckedValue값을 설정하여 체크하지 않은 경우의 파라미터 값을 지정할 수 있다(default는 false)
struts2 인터셉터(initerceptor) – exception
다른 Interceptor나 Action에서 에러가 발생하면 그것을 잡아 예외에 매핑된 result로 응답을 만든다.
struts2 인터셉터(initerceptor) – interceptor-stack
이렇게 자주 사용되는 인터셉터 리스트를 모아서 지정한 것을 interceptor stack이라고 한다.
물론 interceptor-stack 내에 다른 interceptor-stack을 포함하는 것도 가능하다.
C ----- DTO ----- A
prepare : 객체생성
modeldriven : DTO에 넣음
params : 집어넣음
[HelloWorld.java]
public class HelloWorld extends ActionSupport implements Preparable, ModelDriven{
public String execute() throws Exception {
System.out.println("execute");
return SUCCESS;
}
public void prepare() throws Exception {
}
public Object getModel() {
return null;
}
구현 : implements Preparable, ModelDriven
오버라이딩 : prepare(), getModel()
DTO가 prepare로 바뀌었음
[struts.xml]
<action name="hello2" class="test.action.HelloWorld">
<interceptor-ref name="prepare" />
<interceptor-ref name="modelDriven" />
<interceptor-ref name="params" />
<result>/0223/result.jsp</result>
</action>
[interceptor-stack]
인터셉터 스택!
자주 사용되는 인터셉터들을 하나로 묶어 놓은것!
<struts>
<package name="test" extends="struts-default">
<interceptors>
<interceptor-stack name="dto">
<interceptor-ref name="prepare" />
<interceptor-ref name="modelDriven" />
<interceptor-ref name="params" />
</interceptor-stack>
</interceptors>
<action name="hello1" class="test.action.HelloWorld1">
<interceptor-ref name="dto" />
<result>/0223/result.jsp</result>
</action>
<action name="hello2" class="test.action.HelloWorld2">
<interceptor-ref name="dto" />
<result>/0223/result.jsp</result>
</action>
<action name="hello3" class="test.action.HelloWorld3">
<interceptor-ref name="dto" />
<result>/0223/result.jsp</result>
</action>
</package>
</struts>
[static params]
parameter가 들어가기전에 해당폼에 입력되고 만약 입력값이 없는 null이라면
설정한 값이 들어간다.
<struts>
<package name="test" extends="struts-default">
<action name="hello2" class="test.action.HelloWorld">
<param name="id">guest</param>
<result>/0223/result.jsp</result>
</action>
</package>
</struts>
package test.action;
import com.opensymphony.xwork2.ActionSupport;
public class HelloWorld extends ActionSupport{
private String id;
public void setId(String id){
this.id = id;
}
public String execute() throws Exception {
System.out.println(id);
return SUCCESS;
}
}
즉, 사용자가 널값을입력하면 id에 quest가 들어간당
http://localhost:8080/struts/hello2.action로 바로 들어오면
quest가 출력
checkbox
인터셉트 체크박스
채크가 안 된경우 널값을 전달하지 않고 지정된 값을 전달하도록 함
파라미터중 채크박스를 선별하는 과정이 필요함
이름이 중요함
[form.jsp]
<input type="checkbox" name="ch" value="java"/>java
<input type="hidden" name="__checkbox_ch"/>
채크를 하지 않으면 널이 아니고 false로 됨
<struts>
<package name="test" extends="struts-default">
<action name="hello2" class="test.action.HelloWorld">
<interceptor-ref name="checkbox"/>
<interceptor-ref name="params"/>
<result>/0223/result.jsp</result>
</action>
</package>
</struts>
<struts>
<package name="test" extends="struts-default">
<action name="hello2" class="test.action.HelloWorld">
<interceptor-ref name="checkbox">
<param name="unCheckedValue">test</param>
</interceptor-ref>
<interceptor-ref name="params"/>
<result>/0223/result.jsp</result>
</action>
</package>
</struts>
채크 하지 않았을 경우 값을 false가 아닌 다른값으로 변경할수도 있다.
<param name="unCheckedValue">test</param>