2014-06-16 2 views
2

로그인 작업이 성공적으로 실행되면 이전 페이지로 리디렉션됩니다 (이전 페이지를 세션에 저장하므로 나중에 가져올 수 있음). Struts2, 나는이 리디렉션 할 수있는 두 가지 방법으로 찾을 수 있습니다.이 예에서는매개 변수의 양이 알려지지 않은 다른 작업으로의 리디렉션

<action name="login" class="com.myapp.login.Login"> 
     <result name="redirect" type="redirect">${previousAction.requestURL}</result> 
    </action> 

을의 getPreviousAction() 대해 getRequestURL() 메소드 (이 struts2하는 ntive하지의하는 selfmade 방법)가 호출되고 의도 한대로이 예를 들어, 이전 페이지의 URL을 반환합니다

<action name="login" class="com.myapp.login.Login"> 
    <result type="redirectAction"> 
     <param name="actionName">${previousAction.name}</param> 
     <param name="namespace">/${previousAction.namespace}</param> 
    </result> 
</action> 

내가이 redirectaction 결과를 사용하려면 : 재 지정의 또 다른 유형은 또한

somenamespace/index.action 

있다 왜냐하면 그것은 훨씬 더 깔끔하기 때문입니다. 하지만 쿼리 매개 변수가 URL의 일부일 때 문제가 발생합니다. 예를 들어 :

somenamespace/index.action?name=john&age=50 

나는 내 struts.xml에 하드 코딩이 PARAMS을 추가 할 수 있습니다 알고 있지만, 문제는 내 로그인 행동이에이 이전에 호출 작업을 리디렉션해야하고, 나는 이전 매개 변수있는 쿼리를 사전에 알 수없는 행동했다. 이것은 리디렉션 할 작업을 정확히 알고있는 일반적인 유스 케이스와 다릅니다

내가 발견 한 매우 나쁜 해결책은 모든 param 가능 (모든 작업의 ​​모든 params 컬렉션을 struts.xml에 추가)이었고

<param name="suppressEmptyParameters">true</param> 
+0

요청 범위에서 매개 변수를 설정하고 다음 동작에서 매개 변수를 가져 오는 더 좋은 방법 –

+0

http://struts.apache.org/development/2.x/docs/parameters-in-configuration-results.html –

답변

3

당신은 ActionMapping에서 액션 이름, 네임 스페이스 및 매개 변수를 저장할 수 있습니다 : 다음 옵션을 사용합니다.

ActionMapping mapping = ServletActionContext.getActionMapping(); 

매개 변수 맵 대신 쿼리 문자열을 저장할 수도 있습니다.

String params = request.getQueryString(); 

동적 redirectAction에 매개 변수를 추가 동적 매개 변수에 OGNL을 사용한다 결과.

<param name="actionName">${previousAction.name +'?'+ parameters}</param> 

하면 parameters에 대한 게터가 있고 이전의 쿼리 문자열, 액션 이름 및 네임 스페이스를 저장 한 세션을 초기화 세웠 죠.

+0

위의 문서에서 추가 매개 변수를 제공 할 수없는 것처럼 보였습니다. 이름 만 제공되었습니다. – user1884155