문제

내가 사용하는 스트럿 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 개월

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top