2011-01-23 2 views
1

Spring Framework, Velocity 및 (부분적으로) Spring Web Flow로 작성된 webapp가 있습니다. 내 속도 템플릿 내 모든 웹 페이지에서 참조 공통 집합을 제공하기 위해Spring Web Flow Listener에서 리디렉션을 감지하는 방법은 무엇입니까?

는,이처럼 보이는 FlowExecutionListener를 작성했습니다 :

나는 그 모델에 저장된 키에 액세스 할 수
@Override 
public void requestSubmitted(RequestContext context) 
{ 
Map<String, Object> model = new HashMap<String, Object>(); 
populateModel(model); 
context.getRequestScope().putAll(new LocalAttributeMap(model)); 
} 

속도 참조로 예 : $reference. 일반적으로이 방법은 효과적입니다.

그러나, 흐름에서 특정 종료 지점과 같이, GET 요청을 리디렉션합니다 :

<view-state id="startOver" view="redirect:/new"/> 

이 리디렉션이 새로운 요청에 302을 할 것, 모든 요청 속성이 URL 매개 변수로 설정하여, 리디렉션하려고했던 URL /new 대신 큰 URL이 필요했습니다.

요청 속성에 문자열 저장을 건너 뛸 수 있도록 흐름이 리디렉션을 반환 할 때 수신기에서 감지하고 싶습니다. (보기 이름이 "redirect :"로 시작하는지 여부와 일치 시켜서 표준 Spring MVC를 가진 인터셉터로 이것을한다.). 하지만 청취자가이를 감지 할 수있는 방법을 찾을 수없는 것 같습니다.

리디렉션 후에 URL에 요청 속성이 삽입되는 것을 방지하는 다른 방법이 있습니까?

답변

2

리디렉션의 URL을 작성하는 사용자 정의 FlowUrlHandler를 사용할 수 있습니다. 가장 좋은 방법은이 DefaultFlowUrlHandler의 코드를 살펴 보는 것입니다 구현하는 방법을 볼 수 있지만, 문제의 주요 아이디어는 예를 들어, flowDefinitionUrl에서 입력을 필터링하는 것입니다

class MyFlowHandlerAdapter extends DefaultFlowHandlerAdapter { 
    public String createFlowDefinitionUrl(String flowId, AttributeMap input, HttpServletRequest request) { 
    MuttableAttributeMap filteredInput = new MuttableAttributeMap(input); 
    // remove the velocity parameters 
    filteredInput.remove("velocity.param1"); 
    // build the url 
    return super.createFlowDefinitionUrl(flowId,filteredInput,request); 
    } 

} 

그것을 사용하려면, 이것을 사용 봄 구성 :

<bean id="myFlowUrlHandler" class="com.myapp.MyFlowHandlerAdapter"> 

<!-- Dispatches requests mapped to flows to FlowHandler implementations --> 
<bean id="flowHandlerAdapter" class="org.springframework.webflow.mvc.servlet.FlowHandlerAdapter"> 
    <property name="flowExecutor" ref="flowExecutor" /> 
    <property name="flowUrlHandler" ref="myFlowUrlHandler" /> 
    <property name="requireSession" value="true" /> 
</bean> 
+0

좋은 아이디어, 많이 감사합니다! –

0

어떤 버전의 Spring webflow를 사용하고 있습니까?

저는 1.0.5에서 작업했으며 alwaysRedirectOnPause이라는 리디렉션을 발생시키는 속성이 있습니다. 당신은이 비슷한있다 webflow 심지어 봄을 생각 중복 Understanding alswaysRedirectOnPause

에서 제출에 또한이 리디렉션 동작을하는 데 도움이 방법의 자세한 내용을 읽을 수있는이

<flow:alwaysRedirectOnPause value="false"/> 

같은 태그 무언가를 사용하여 false로 설정할 수 있습니다 속성이지만 정확한 구문을 알지 못합니다.

희망이 도움이됩니다.

+0

이것은 내가 찾는 것 같지 않습니다. 이미 리디렉션 중입니다. URL 쿼리 매개 변수를 생략하기 만하면됩니다. –

관련 문제