2008-09-05 6 views
2

Struts 2을 사용하고 있습니다.Struts 2 : 호출 페이지로 돌아 가기

조치에서 호출 한 페이지로 돌아가고 싶습니다.

내가 페이지 x.jsp에 있음을 말하면 세션의 CSS 기본 설정을 변경하기 위해 시각적 동작을 호출합니다. 물론

 
<action 
    name="Visual" 
    class="it.___.web.actions.VisualizationAction"> 
    <result name="home">/pages/home.jsp</result> 
</action> 

: 차라리 고정 페이지 (즉, home.jsp)

여기에 관련 struts.xml 조각이기보다는 x.jsp로 돌아가려면 내 VisualizationAction.execute()가정을 반환합니다.

트릭을 수행하기 위해 돌아올 수있는 "마법"상수 (예 : INPUT_PAGE)가 있습니까?

좀 더 복잡한 방법 (예 : 요청 페이지를 추출하여 전달)을 사용해야합니까?

티아이씨.

답변

3

struts.xml에서 동적 결과를 사용할 수 있습니다. 예 :

그런 다음, 다음 필드를 만듭니다. 따라서 액션을 호출하기 위해 다음에 전달할 페이지의 이름을 전달합니다. 그런 다음 액션은 "다음"을 반환하고 스트럿은 어느 페이지로 갈지 알 수 있습니다.

이 게시물에 더 좋은 설명이있다 : Stack Overflow

1
return INPUT; 

트릭을 수행합니다. INPUT 상수는 Action 인터페이스 자체에서 정의됩니다. 그것은 행동이 더 많은 입력을 필요로 함을 나타냅니다.

작업 입력 페이지로 이동 한 페이지를 의미하는 경우 호출 페이지를 사용하면 입력 페이지가 HTTP 헤더 "Referer"를 작업의 요청 범위에 저장해야합니다.

+0

친절한 (그리고 즉각적인) 답장을 보내 주셔서 감사합니다. nikhilbelsare.
을 시도했지만 **No result defined for action it.___.web.actions.VisualizationAction and result input**
오류 메시지가 나타났습니다. "내 입력"을 내에 정의하지 않았기 때문에 오류 메시지가 꽤 많이 나옵니다.
내가 실제로하고 싶었던 것은 Struts 2가 자동으로 참조 페이지를 확인하고 나를 전달하는 것입니다. 액션은 많은 다른 페이지에서 호출 되었기 때문에 나는 입력을 예측할 수있는 방법이 없습니다.
헤더를 구문 분석하는 데 걸린 것 같아요 ... –

+0

또는 리디렉션 할 페이지를 Action에 알려주는 숨겨진 필드를 각 페이지에 포함시킬 수 있습니다. 이렇게하면 사물을보다 세밀하게 제어 할 수 있습니다. – nikhilbelsare

0

난 당신이 특정 행동에 의해 사용자를 탐색하는 방식을 선호합니다.

http://domain.com/myAction.action

당신은 당신이 현재 디자인 변경하려는 것을 지표로 몇 가지 매개 변수를 사용할 수 있습니다 : 그럼

http://domain.com/myAction.action?changeDesign=silver_theme

을, 당신은 논리가되는 일부 스트럿츠 2 인터셉터 쓰기 이러한 매개 변수 'changeDesign'이 있는지 확인하십시오.이 인터셉터는 디자인 변경 작업을 수행하고 워크 플로를 제어합니다. 인터셉터를 사용하면 크로스 커팅 로직에서 작업을 분리 할 수 ​​있습니다.

1

내 솔루션에는 하나의 인터페이스와 하나의 인터셉터가 필요합니다.당신은 모든 작업 에 대해 다음 인터페이스를 구현하려면 리디렉션 할 가능성이있는 :

public interface TargetAware { 
    public String getTarget(); 
    public void setTarget(String target); 
} 

인터셉터는 단순히 필요한 경우 대상이 설정되어 있는지 확인합니다 :

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 인터페이스를 구현하면 (필요하면 리디렉션해야 함) 필요할 때마다 JSP의 target 매개 변수에 액세스 할 수 있습니다. 당신의 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.x 및 2.1.x가 다를 수 있습니다 ...).

0

확인, 클래스가 .___ web.actions.VisualizationAction에, 당신은 당신이이 같은 설정해야 struts.xml에 다음 입력을 포함하는 문자열 값을 반환해야합니다.

<action name="Visual" class="it.___.web.actions.VisualizationAction"> 
    <result name="input">yourJspPage.jsp</result> 
</action> 

이 원하는 페이지로 연결됩니다. 2 달 동안 struts2에서 작업하고 있습니다.

+0

이것은 사용자가 요구하는 것이 아닙니다. 그는 호출 페이지를 기반으로 JspPage.jsp를 동적으로 변경하려고합니다. – user1884155