2010-02-08 1 views
4

루트 네임 스페이스에 정의 된 이름에 빈 문자열을 사용하는 동작이 있으며 특정 결과가 발견되면 다른 동작에서 해당 동작으로 리디렉션하고 싶습니다. 일하다. 여기 Struts 2의 기본 동작으로 리디렉션

는 기본 동작

<action name="" class="com.example.actions.HomeAction"> 
    <result name="success" type="freemarker">freemarker/home.ftl</result> 
</action> 

입니다 그리고 패키지의 글로벌 결과에 리디렉션을 정의하고 있습니다 :

<global-results> 
    <result name="sendToRouting" type="redirectAction"> 
     <param name="actionName"></param> 
     <param name="namespace">/</param> 
    </result> 
</global-results> 

내가 actionName 매개 변수를 복용 시도했지만, 그 작동하지 않습니다. HomeAction에 이름을 지정하고 글로벌 결과에서 이름으로 참조하면 작동합니다. 따라서 문제는 리디렉션에 대한 작업 이름이 없다고 가정합니다.

의견이 있으십니까?

+0

변경 유형은 "리디렉션 액션을"= 입력 ...

<param name="actionName">${}</param> 

아직도 생각보다 "올바른"솔루션을 찾고 : 나는 빈 문자열로을 평가 문자열을 제공함으로써이 문제를 해결 해킹 –

+0

나는 struts 2.1.6을 사용하고 있는데, 나는 리다이렉트 액션이 이전 버전의 redirectAction으로 바뀌 었음을 읽었다. –

+0

그냥 호기심, 행동에 이름을 부여하지 않는 것이 "좋은"이유 일 수 있습니까? 예를 들어, "기본값"또는 뭔가? 이름이없는 액션을 사용하면 어떤 이점도 보이지 않습니다. – user1884155

답변

11

나는 싶은 것은 사용 <default-action-ref />이라고 생각 :

내가 redirectAction 지금 것을 매우 확신, type="redirect"type="redirectAction"을 변경해보십시오 :

<package name="home" namespace="/" extends="struts-default"> 
    <default-action-ref name="home" /> 

    <action name="home" class="com.example.actions.HomeAction"> 
     <result name="success" type="freemarker">freemarker/home.ftl</result> 
    </action> 

</package> 

죄송합니다 ... 질문을 오해 리디렉션.

+0

아니요, 'redirect'는 URL 용이며, 'redirectAction'은 액션 이름을 직접 참조 할 수있게 해줍니다. – FaithReaper

3

actionName 매개 변수가 비어있어 NullPointerException이 발생 했습니까?

+0

흠, 그건 흥미로운 일입니다. 나는 그것도 시도해야합니다 –

+0

사실 이것은 귀하의 질문에 대한 정답입니다 –