문제
내가 사용하는 스트럿 2.
나는 돌아서 행동하는 페이지가 호출됩니다.
나의 페이지 x.jsp, 에,나는 호출 시각적 행동을 변경 CSS 기본 설정 세션에서;I 으로 돌아가려면 x.jsp 하기보다는 고정 페이지(즉 다.jsp)
여기에 관련 struts.xml 조각:
<action name="Visual" class="it.___.web.actions.VisualizationAction"> <result name="home">/pages/home.jsp</result> </action>
물론 나 VisualizationAction.execute()
환 홈.
이 있"magic"일(말처럼,INPUT_PAGE)는 반환할 수 있습을 할 수?
내가 사용해야 더 많은 관여 방법(즉추출 요청이 페이지에 전달하는)?
T.I.A.
해결책
당신이 사용할 수 있는 동적인 결과에 struts.xml.예를 들어:
<action
name="Visual"
class="it.___.web.actions.VisualizationAction">
<result name="next">${next}</result>
</action>
에 다음의 활동을 만들라는 필드에 다음.그래서 작업을 호출신의 이름을 전달하는 페이지를 전달하려는 다음에.조치를 반환하고"다음"스트럿이 알고 있는 페이지로 이동합니다.
이 좋에 대한 설명이 포스트: Stack Overflow
다른 팁
return INPUT;
할 것이다.입력 일정에 정의된 조치 인터페이스 자체.을 나타내는 작업이 필요 더 많은 입력이 있습니다.
에 의해 호출하는 경우 페이지의 것 페이지 하는 조치 입력 페이지,다음의 입력에 페이지를 저장하는 HTTP 헤더에"Referer"요청의 범위에 대한 액션입니다.
나의 솔루션을 포함하는 것 하나의 인터페이스 및 하나 interceptor.당신이 다음 인터페이스를 구현을 위해 모든 작업 하는 당신이 원하는 리디렉션하려면:
public interface TargetAware {
public String getTarget();
public void setTarget(String target);
}
Interceptor 간단히 보장하는 목표가 설정되,필요한 경우:
public class SetTargetInterceptor extends MethodFilterInterceptor implements Interceptor {
public String doIntercept(ActionInvocation invocation) {
Object action = invocation.getAction();
HttpServletRequest request = (HttpServletRequest) invocation.getInvocationContext().get(StrutsStatics.HTTP_REQUEST);
if (action instanceof TargetAware) {
TargetAware targetAwareAction = (TargetAware) action;
if (targetAwareAction.getTarget() == null)
targetAwareAction.setTarget(getCurrentUri(request));
}
return invocation.invoke();
}
// I'm sure we can find a better implementation of this...
private static String getCurrentUri(HttpServletRequest request) {
String uri = request.getRequestURI();
String queryString = request.getQueryString();
if (queryString != null && !queryString.equals(""))
uri += "?" + queryString;
return uri;
}
public void init() { /* do nothing */ }
public void destroy() { /* do nothing */ }
}
다음에서 한 공공건물에서 실내와 실외에서 이러한 두 가지 조금은 장소에서의 작업을 구현하는 TargetAware
인터페이스(는 경우 당신이 기대하여 리디렉션을 그들에게),당신은에 액세스 target
매개변수에 Jsp 필요할 때마다 사용할 수 있습니다.전달하는 매개변수에 VisualizationAction
(수 있는 대로 잘 구현한 TargetAware
인터페이스를!), 에 SUCCESS
, 리디렉션된 대로 빈센트 Ramdhanie:
<action name="Visual" class="it.___.web.actions.VisualizationAction">
<result type="redirect">
<param name="location">${target}</param>
<param name="parse">true</param>
</result>
</action>
하려고 노력하지 않는 모든 단일 세부 사항입니다.특히,주의 표기는 주변 redirect
그 결과 유형(에 따라하의 특정 버전 Struts2:2.0.x2.1.x 에 다를 수 있습니다 이...).
내가 선호하는 방법을 때 당신은 탐색하는 사용자에 의해 특정 작업입니다.
http://domain.com/myAction.action
당신이 사용할 수있는 매개변수로 표시기,변경할 현재 디자인:즉
http://domain.com/myAction.action?changeDesign=silver_theme
그래서,당신이 쓰는 몇 가지 스트럿 2interceptor 는 논리는의 현재 상태를 확인한 매개 변수는'changeDesign',그리고 이 interceptor 할 것입니다 nessesary 작업을 변경하는 디자인과 제어하는 것입니다.로 요격은 당신을 분리하는 작업에서 사람 논리입니다.
ok,에서 당신의 클래스습니다.___.웹.작업입니다.VisualizationAction 해야 합니다 문자열 값을 반환을 포함하는 입력한 다음에,struts.xml 당신이 무언가를 설정하는 다음과 같다:
<action name="Visual" class="it.___.web.actions.VisualizationAction">
<result name="input">yourJspPage.jsp</result>
</action>
이 이어질 것입니다 당신은 당신이 결정하는 데 도움이.이 작업,작업을했습니다 struts2 따라 2 개월