类org.springframework.web.servlet.FlashMap源码实例Demo

下面列出了怎么用org.springframework.web.servlet.FlashMap的API类实例代码及写法,或者点击链接到github查看源代码。

源代码1 项目: wallride   文件: TagRestController.java
@RequestMapping(value="/{language}/tags", method=RequestMethod.POST)
public @ResponseBody DomainObjectSavedModel save(
		@Valid TagCreateForm form,
		BindingResult errors,
		AuthorizedUser authorizedUser,
		HttpServletRequest request,
		HttpServletResponse response) throws BindException {
	if (errors.hasErrors()) {
		throw new BindException(errors);
	}

	Tag savedTag;
	try {
		savedTag = tagService.createTag(form.buildTagCreateRequest(), authorizedUser);
	} catch (DuplicateNameException e) {
		errors.rejectValue("name", "NotDuplicate");
		throw new BindException(errors);
	}

	FlashMap flashMap = RequestContextUtils.getOutputFlashMap(request);
	flashMap.put("savedTag", savedTag);
	RequestContextUtils.getFlashMapManager(request).saveOutputFlashMap(flashMap, request, response);
	return new DomainObjectSavedModel<>(savedTag);
}
 
@Test
public void setAlwaysUseRedirectAttributes() throws Exception {
	HandlerMethodArgumentResolver redirectAttributesResolver = new RedirectAttributesMethodArgumentResolver();
	HandlerMethodArgumentResolver modelResolver = new ModelMethodProcessor();
	HandlerMethodReturnValueHandler viewHandler = new ViewNameMethodReturnValueHandler();

	this.handlerAdapter.setArgumentResolvers(Arrays.asList(redirectAttributesResolver, modelResolver));
	this.handlerAdapter.setReturnValueHandlers(Collections.singletonList(viewHandler));
	this.handlerAdapter.setIgnoreDefaultModelOnRedirect(true);
	this.handlerAdapter.afterPropertiesSet();

	this.request.setAttribute(DispatcherServlet.OUTPUT_FLASH_MAP_ATTRIBUTE, new FlashMap());

	HandlerMethod handlerMethod = handlerMethod(new RedirectAttributeController(), "handle", Model.class);
	ModelAndView mav = this.handlerAdapter.handle(request, response, handlerMethod);

	assertTrue("Without RedirectAttributes arg, model should be empty", mav.getModel().isEmpty());
}
 
源代码3 项目: sinavi-jfw   文件: JseErrorsTagTest.java
@Test
public void エラーメッセージがリクエストとフラッシュスコープにセットされ出力される() throws Exception {

    MessageContext context = new MessageContext(request);
    context.saveErrorMessageToRequest("E-JX_ERRORS_TAG_TEST#0001");
    context.saveErrorMessageToFlash("E-JX_ERRORS_TAG_TEST#0002");
    FlashMap flashMap = RequestContextUtils.getOutputFlashMap(request);
    request.setAttribute(MessageContext.ERROR_MESSAGE_KEY_TO_FLASH, flashMap.get(MessageContext.ERROR_MESSAGE_KEY_TO_FLASH));
    JseErrorsTag tag = new JseErrorsTag();
    tag.setJspContext(page);
    tag.doTag();

    assertThat(response.getContentAsString(), is("<div class=\"jfw_messages\">"
            + "<p class=\"jfw_err_msg_style\">E-JX_ERRORS_TAG_TEST#0001</p>"
            + "<p class=\"jfw_err_msg_style\">E-JX_ERRORS_TAG_TEST#0002</p></div>"));
}
 
@Test
public void retrieveAndUpdateMatchWithMultiValueParam() {
	FlashMap flashMap = new FlashMap();
	flashMap.put("name", "value");
	flashMap.addTargetRequestParam("id", "1");
	flashMap.addTargetRequestParam("id", "2");

	this.flashMapManager.setFlashMaps(Arrays.asList(flashMap));

	this.request.setQueryString("id=1");
	FlashMap inputFlashMap = this.flashMapManager.retrieveAndUpdate(this.request, this.response);

	assertNull(inputFlashMap);
	assertEquals("FlashMap should not have been removed", 1, this.flashMapManager.getFlashMaps().size());

	this.request.setQueryString("id=1&id=2");
	inputFlashMap = this.flashMapManager.retrieveAndUpdate(this.request, this.response);

	assertEquals(flashMap, inputFlashMap);
	assertEquals("Input FlashMap should have been removed", 0, this.flashMapManager.getFlashMaps().size());
}
 
@Test
public void retrieveAndUpdateSortMultipleMatches() {
	FlashMap emptyFlashMap = new FlashMap();

	FlashMap flashMapOne = new FlashMap();
	flashMapOne.put("key1", "value1");
	flashMapOne.setTargetRequestPath("/one");

	FlashMap flashMapTwo = new FlashMap();
	flashMapTwo.put("key1", "value1");
	flashMapTwo.put("key2", "value2");
	flashMapTwo.setTargetRequestPath("/one/two");

	this.flashMapManager.setFlashMaps(Arrays.asList(emptyFlashMap, flashMapOne, flashMapTwo));

	this.request.setRequestURI("/one/two");
	FlashMap inputFlashMap = this.flashMapManager.retrieveAndUpdate(this.request, this.response);

	assertEquals(flashMapTwo, inputFlashMap);
	assertEquals("Input FlashMap should have been removed", 2, this.flashMapManager.getFlashMaps().size());
}
 
源代码6 项目: lams   文件: RedirectView.java
/**
 * Convert model to request parameters and redirect to the given URL.
 * @see #appendQueryProperties
 * @see #sendRedirect
 */
@Override
protected void renderMergedOutputModel(Map<String, Object> model, HttpServletRequest request,
		HttpServletResponse response) throws IOException {

	String targetUrl = createTargetUrl(model, request);
	targetUrl = updateTargetUrl(targetUrl, model, request, response);

	FlashMap flashMap = RequestContextUtils.getOutputFlashMap(request);
	if (!CollectionUtils.isEmpty(flashMap)) {
		UriComponents uriComponents = UriComponentsBuilder.fromUriString(targetUrl).build();
		flashMap.setTargetRequestPath(uriComponents.getPath());
		flashMap.addTargetRequestParams(uriComponents.getQueryParams());
		FlashMapManager flashMapManager = RequestContextUtils.getFlashMapManager(request);
		if (flashMapManager == null) {
			throw new IllegalStateException("FlashMapManager not found despite output FlashMap having been set");
		}
		flashMapManager.saveOutputFlashMap(flashMap, request, response);
	}

	sendRedirect(request, response, targetUrl, this.http10Compatible);
}
 
@Test
public void flashAttributesWithQueryParamsWithSpace() throws Exception {

	String encodedValue = URLEncoder.encode("1 2", "UTF-8");

	FlashMap flashMap = new FlashMap();
	flashMap.put("key", "value");
	flashMap.setTargetRequestPath("/path");
	flashMap.addTargetRequestParam("param", encodedValue);

	this.request.setCharacterEncoding("UTF-8");
	this.flashMapManager.saveOutputFlashMap(flashMap, this.request, this.response);

	MockHttpServletRequest requestAfterRedirect = new MockHttpServletRequest("GET", "/path");
	requestAfterRedirect.setQueryString("param=" + encodedValue);
	requestAfterRedirect.addParameter("param", "1 2");

	flashMap = this.flashMapManager.retrieveAndUpdate(requestAfterRedirect, new MockHttpServletResponse());
	assertNotNull(flashMap);
	assertEquals(1, flashMap.size());
	assertEquals("value", flashMap.get("key"));
}
 
@Test // SPR-15505
public void retrieveAndUpdateMatchByOriginatingPathAndQueryString() {
	FlashMap flashMap = new FlashMap();
	flashMap.put("key", "value");
	flashMap.setTargetRequestPath("/accounts");
	flashMap.addTargetRequestParam("a", "b");

	this.flashMapManager.setFlashMaps(Collections.singletonList(flashMap));

	this.request.setAttribute(WebUtils.FORWARD_REQUEST_URI_ATTRIBUTE, "/accounts");
	this.request.setAttribute(WebUtils.FORWARD_QUERY_STRING_ATTRIBUTE, "a=b");
	this.request.setRequestURI("/mvc/accounts");
	this.request.setQueryString("x=y");
	FlashMap inputFlashMap = this.flashMapManager.retrieveAndUpdate(this.request, this.response);

	assertEquals(flashMap, inputFlashMap);
	assertEquals("Input FlashMap should have been removed", 0, this.flashMapManager.getFlashMaps().size());
}
 
源代码9 项目: wallride   文件: PageRestController.java
@RequestMapping(value="/{language}/pages", method=RequestMethod.POST)
public @ResponseBody DomainObjectSavedModel save(
		@Valid PageCreateForm form,
		BindingResult result,
		AuthorizedUser authorizedUser,
		HttpServletRequest request,
		HttpServletResponse response) throws BindException {
	if (result.hasErrors()) {
		throw new BindException(result);
	}
	Page page = pageService.createPage(form.buildPageCreateRequest(), Post.Status.DRAFT, authorizedUser);
	FlashMap flashMap = RequestContextUtils.getOutputFlashMap(request);
	flashMap.put("savedPage", page);
	RequestContextUtils.getFlashMapManager(request).saveOutputFlashMap(flashMap, request, response);
	return new DomainObjectSavedModel<>(page);
}
 
源代码10 项目: wallride   文件: TagRestController.java
@RequestMapping(value="/{language}/tags/{id}", method=RequestMethod.POST)
public @ResponseBody DomainObjectUpdatedModel update(
		@Valid TagEditForm form,
		BindingResult errors,
		@PathVariable long id,
		AuthorizedUser authorizedUser,
		HttpServletRequest request,
		HttpServletResponse response) throws BindException {
	form.setId(id);
	if (errors.hasErrors()) {
		throw new BindException(errors);
	}

	Tag savedTag;
	try {
		savedTag = tagService.updateTag(form.buildTagUpdateRequest(), authorizedUser);
	} catch (DuplicateNameException e) {
		errors.rejectValue("name", "NotDuplicate");
		throw new BindException(errors);
	}

	FlashMap flashMap = RequestContextUtils.getOutputFlashMap(request);
	flashMap.put("savedTag", savedTag);
	RequestContextUtils.getFlashMapManager(request).saveOutputFlashMap(flashMap, request, response);
	return new DomainObjectUpdatedModel<>(savedTag);
}
 
@Test
public void saveOutputFlashMapDecodeParameters() throws Exception {

	FlashMap flashMap = new FlashMap();
	flashMap.put("key", "value");
	flashMap.setTargetRequestPath("/path");
	flashMap.addTargetRequestParam("param", "%D0%90%D0%90");
	flashMap.addTargetRequestParam("param", "%D0%91%D0%91");
	flashMap.addTargetRequestParam("param", "%D0%92%D0%92");
	flashMap.addTargetRequestParam("%3A%2F%3F%23%5B%5D%40", "value");

	this.request.setCharacterEncoding("UTF-8");
	this.flashMapManager.saveOutputFlashMap(flashMap, this.request, this.response);

	MockHttpServletRequest requestAfterRedirect = new MockHttpServletRequest("GET", "/path");
	requestAfterRedirect.setQueryString("param=%D0%90%D0%90&param=%D0%91%D0%91&param=%D0%92%D0%92&%3A%2F%3F%23%5B%5D%40=value");
	requestAfterRedirect.addParameter("param", "\u0410\u0410");
	requestAfterRedirect.addParameter("param", "\u0411\u0411");
	requestAfterRedirect.addParameter("param", "\u0412\u0412");
	requestAfterRedirect.addParameter(":/?#[]@", "value");

	flashMap = this.flashMapManager.retrieveAndUpdate(requestAfterRedirect, new MockHttpServletResponse());
	assertNotNull(flashMap);
	assertEquals(1, flashMap.size());
	assertEquals("value", flashMap.get("key"));
}
 
@Test
public void setAlwaysUseRedirectAttributes() throws Exception {
	HandlerMethodArgumentResolver redirectAttributesResolver = new RedirectAttributesMethodArgumentResolver();
	HandlerMethodArgumentResolver modelResolver = new ModelMethodProcessor();
	HandlerMethodReturnValueHandler viewHandler = new ViewNameMethodReturnValueHandler();

	this.handlerAdapter.setArgumentResolvers(Arrays.asList(redirectAttributesResolver, modelResolver));
	this.handlerAdapter.setReturnValueHandlers(Collections.singletonList(viewHandler));
	this.handlerAdapter.setIgnoreDefaultModelOnRedirect(true);
	this.handlerAdapter.afterPropertiesSet();

	this.request.setAttribute(DispatcherServlet.OUTPUT_FLASH_MAP_ATTRIBUTE, new FlashMap());

	HandlerMethod handlerMethod = handlerMethod(new RedirectAttributeController(), "handle", Model.class);
	ModelAndView mav = this.handlerAdapter.handle(request, response, handlerMethod);

	assertTrue("Without RedirectAttributes arg, model should be empty", mav.getModel().isEmpty());
}
 
@Test
public void retrieveAndUpdateSortMultipleMatches() {
	FlashMap emptyFlashMap = new FlashMap();

	FlashMap flashMapOne = new FlashMap();
	flashMapOne.put("key1", "value1");
	flashMapOne.setTargetRequestPath("/one");

	FlashMap flashMapTwo = new FlashMap();
	flashMapTwo.put("key1", "value1");
	flashMapTwo.put("key2", "value2");
	flashMapTwo.setTargetRequestPath("/one/two");

	this.flashMapManager.setFlashMaps(Arrays.asList(emptyFlashMap, flashMapOne, flashMapTwo));

	this.request.setRequestURI("/one/two");
	FlashMap inputFlashMap = this.flashMapManager.retrieveAndUpdate(this.request, this.response);

	assertEquals(flashMapTwo, inputFlashMap);
	assertEquals("Input FlashMap should have been removed", 2, this.flashMapManager.getFlashMaps().size());
}
 
@Test
public void retrieveAndUpdateSortMultipleMatches() {
	FlashMap emptyFlashMap = new FlashMap();

	FlashMap flashMapOne = new FlashMap();
	flashMapOne.put("key1", "value1");
	flashMapOne.setTargetRequestPath("/one");

	FlashMap flashMapTwo = new FlashMap();
	flashMapTwo.put("key1", "value1");
	flashMapTwo.put("key2", "value2");
	flashMapTwo.setTargetRequestPath("/one/two");

	this.flashMapManager.setFlashMaps(Arrays.asList(emptyFlashMap, flashMapOne, flashMapTwo));

	this.request.setRequestURI("/one/two");
	FlashMap inputFlashMap = this.flashMapManager.retrieveAndUpdate(this.request, this.response);

	assertEquals(flashMapTwo, inputFlashMap);
	assertEquals("Input FlashMap should have been removed", 2, this.flashMapManager.getFlashMaps().size());
}
 
@Test
public void setAlwaysUseRedirectAttributes() throws Exception {
	HandlerMethodArgumentResolver redirectAttributesResolver = new RedirectAttributesMethodArgumentResolver();
	HandlerMethodArgumentResolver modelResolver = new ModelMethodProcessor();
	HandlerMethodReturnValueHandler viewHandler = new ViewNameMethodReturnValueHandler();

	this.handlerAdapter.setArgumentResolvers(Arrays.asList(redirectAttributesResolver, modelResolver));
	this.handlerAdapter.setReturnValueHandlers(Collections.singletonList(viewHandler));
	this.handlerAdapter.setIgnoreDefaultModelOnRedirect(true);
	this.handlerAdapter.afterPropertiesSet();

	this.request.setAttribute(DispatcherServlet.OUTPUT_FLASH_MAP_ATTRIBUTE, new FlashMap());

	HandlerMethod handlerMethod = handlerMethod(new RedirectAttributeController(), "handle", Model.class);
	ModelAndView mav = this.handlerAdapter.handle(request, response, handlerMethod);

	assertTrue("Without RedirectAttributes arg, model should be empty", mav.getModel().isEmpty());
}
 
@Test
public void flashAttributesWithQueryParamsWithSpace() throws Exception {

	String encodedValue = URLEncoder.encode("1 2", "UTF-8");

	FlashMap flashMap = new FlashMap();
	flashMap.put("key", "value");
	flashMap.setTargetRequestPath("/path");
	flashMap.addTargetRequestParam("param", encodedValue);

	this.request.setCharacterEncoding("UTF-8");
	this.flashMapManager.saveOutputFlashMap(flashMap, this.request, this.response);

	MockHttpServletRequest requestAfterRedirect = new MockHttpServletRequest("GET", "/path");
	requestAfterRedirect.setQueryString("param=" + encodedValue);
	requestAfterRedirect.addParameter("param", "1 2");

	flashMap = this.flashMapManager.retrieveAndUpdate(requestAfterRedirect, new MockHttpServletResponse());
	assertNotNull(flashMap);
	assertEquals(1, flashMap.size());
	assertEquals("value", flashMap.get("key"));
}
 
@Test // SPR-15505
public void retrieveAndUpdateMatchByOriginatingPathAndQueryString() {
	FlashMap flashMap = new FlashMap();
	flashMap.put("key", "value");
	flashMap.setTargetRequestPath("/accounts");
	flashMap.addTargetRequestParam("a", "b");

	this.flashMapManager.setFlashMaps(Collections.singletonList(flashMap));

	this.request.setAttribute(WebUtils.FORWARD_REQUEST_URI_ATTRIBUTE, "/accounts");
	this.request.setAttribute(WebUtils.FORWARD_QUERY_STRING_ATTRIBUTE, "a=b");
	this.request.setRequestURI("/mvc/accounts");
	this.request.setQueryString("x=y");
	FlashMap inputFlashMap = this.flashMapManager.retrieveAndUpdate(this.request, this.response);

	assertEquals(flashMap, inputFlashMap);
	assertEquals("Input FlashMap should have been removed", 0, this.flashMapManager.getFlashMaps().size());
}
 
源代码18 项目: spring4-understanding   文件: RedirectView.java
/**
 * Convert model to request parameters and redirect to the given URL.
 * @see #appendQueryProperties
 * @see #sendRedirect
 */
@Override
protected void renderMergedOutputModel(Map<String, Object> model, HttpServletRequest request,
		HttpServletResponse response) throws IOException {

	String targetUrl = createTargetUrl(model, request);
	targetUrl = updateTargetUrl(targetUrl, model, request, response);

	FlashMap flashMap = RequestContextUtils.getOutputFlashMap(request);
	if (!CollectionUtils.isEmpty(flashMap)) {
		UriComponents uriComponents = UriComponentsBuilder.fromUriString(targetUrl).build();
		flashMap.setTargetRequestPath(uriComponents.getPath());
		flashMap.addTargetRequestParams(uriComponents.getQueryParams());
		FlashMapManager flashMapManager = RequestContextUtils.getFlashMapManager(request);
		if (flashMapManager == null) {
			throw new IllegalStateException("FlashMapManager not found despite output FlashMap having been set");
		}
		flashMapManager.saveOutputFlashMap(flashMap, request, response);
	}

	sendRedirect(request, response, targetUrl, this.http10Compatible);
}
 
源代码19 项目: wallride   文件: CategoryRestController.java
@RequestMapping(value="/{language}/categories", method=RequestMethod.POST)
public @ResponseBody DomainObjectSavedModel save(
		@Valid CategoryCreateForm form,
		BindingResult result,
		AuthorizedUser authorizedUser,
		HttpServletRequest request,
		HttpServletResponse response) throws BindException {
	if (result.hasErrors()) {
		throw new BindException(result);
	}
	Category category = categoryService.createCategory(form.buildCategoryCreateRequest(), authorizedUser);
	FlashMap flashMap = RequestContextUtils.getOutputFlashMap(request);
	flashMap.put("savedCategory", category);
	RequestContextUtils.getFlashMapManager(request).saveOutputFlashMap(flashMap, request, response);
	return new DomainObjectSavedModel<>(category);
}
 
源代码20 项目: sinavi-jfw   文件: JseMessagesTagTest.java
@Before
public void setup() throws Exception {

    MockServletContext sc = new MockServletContext();
    request = new MockHttpServletRequest(sc);
    response = new MockHttpServletResponse();
    page = new MockPageContext(sc, request, response);
    request.setAttribute(DispatcherServlet.OUTPUT_FLASH_MAP_ATTRIBUTE, new FlashMap());
}
 
/**
 * Return a list of expired FlashMap instances contained in the given list.
 */
private List<FlashMap> getExpiredFlashMaps(List<FlashMap> allMaps) {
	List<FlashMap> result = new LinkedList<>();
	for (FlashMap map : allMaps) {
		if (map.isExpired()) {
			result.add(map);
		}
	}
	return result;
}
 
源代码22 项目: wallride   文件: CategoryRestController.java
@RequestMapping(value="/{language}/categories/{id}", method= RequestMethod.DELETE)
public @ResponseBody DomainObjectDeletedModel<Long> delete(
		@PathVariable String language,
		@PathVariable long id,
		AuthorizedUser authorizedUser,
		HttpServletRequest request,
		HttpServletResponse response) throws BindException {
	Category category = categoryService.deleteCategory(id, language);
	FlashMap flashMap = RequestContextUtils.getOutputFlashMap(request);
	flashMap.put("deletedCategory", category);
	RequestContextUtils.getFlashMapManager(request).saveOutputFlashMap(flashMap, request, response);
	return new DomainObjectDeletedModel<>(category);
}
 
源代码23 项目: spring-analysis-note   文件: RequestContextUtils.java
/**
 * Convenience method that retrieves the {@link #getOutputFlashMap "output"
 * FlashMap}, updates it with the path and query params of the target URL,
 * and then saves it using the {@link #getFlashMapManager FlashMapManager}.
 * @param location the target URL for the redirect
 * @param request the current request
 * @param response the current response
 * @since 5.0
 */
public static void saveOutputFlashMap(String location, HttpServletRequest request, HttpServletResponse response) {
	FlashMap flashMap = getOutputFlashMap(request);
	if (CollectionUtils.isEmpty(flashMap)) {
		return;
	}

	UriComponents uriComponents = UriComponentsBuilder.fromUriString(location).build();
	flashMap.setTargetRequestPath(uriComponents.getPath());
	flashMap.addTargetRequestParams(uriComponents.getQueryParams());

	FlashMapManager manager = getFlashMapManager(request);
	Assert.state(manager != null, "No FlashMapManager. Is this a DispatcherServlet handled request?");
	manager.saveOutputFlashMap(flashMap, request, response);
}
 
/**
 * Retrieves saved FlashMap instances from the HTTP session, if any.
 */
@Override
@SuppressWarnings("unchecked")
@Nullable
protected List<FlashMap> retrieveFlashMaps(HttpServletRequest request) {
	HttpSession session = request.getSession(false);
	return (session != null ? (List<FlashMap>) session.getAttribute(FLASH_MAPS_SESSION_ATTRIBUTE) : null);
}
 
源代码25 项目: sinavi-jfw   文件: JseInformationsTagTest.java
@Before
public void setup() throws Exception {

    MockServletContext sc = new MockServletContext();
    request = new MockHttpServletRequest(sc);
    response = new MockHttpServletResponse();
    page = new MockPageContext(sc, request, response);
    request.setAttribute(DispatcherServlet.OUTPUT_FLASH_MAP_ATTRIBUTE, new FlashMap());
}
 
源代码26 项目: spring-analysis-note   文件: RedirectViewTests.java
@Before
public void setUp() throws Exception {
	this.request = new MockHttpServletRequest();
	this.request.setContextPath("/context");
	this.request.setCharacterEncoding(WebUtils.DEFAULT_CHARACTER_ENCODING);
	this.request.setAttribute(DispatcherServlet.OUTPUT_FLASH_MAP_ATTRIBUTE, new FlashMap());
	this.request.setAttribute(DispatcherServlet.FLASH_MAP_MANAGER_ATTRIBUTE, new SessionFlashMapManager());
	this.response = new MockHttpServletResponse();

}
 
源代码27 项目: lams   文件: AbstractFlashMapManager.java
@Override
public final FlashMap retrieveAndUpdate(HttpServletRequest request, HttpServletResponse response) {
	List<FlashMap> allFlashMaps = retrieveFlashMaps(request);
	if (CollectionUtils.isEmpty(allFlashMaps)) {
		return null;
	}

	if (logger.isDebugEnabled()) {
		logger.debug("Retrieved FlashMap(s): " + allFlashMaps);
	}
	List<FlashMap> mapsToRemove = getExpiredFlashMaps(allFlashMaps);
	FlashMap match = getMatchingFlashMap(allFlashMaps, request);
	if (match != null) {
		mapsToRemove.add(match);
	}

	if (!mapsToRemove.isEmpty()) {
		if (logger.isDebugEnabled()) {
			logger.debug("Removing FlashMap(s): " + mapsToRemove);
		}
		Object mutex = getFlashMapsMutex(request);
		if (mutex != null) {
			synchronized (mutex) {
				allFlashMaps = retrieveFlashMaps(request);
				if (allFlashMaps != null) {
					allFlashMaps.removeAll(mapsToRemove);
					updateFlashMaps(allFlashMaps, request, response);
				}
			}
		}
		else {
			allFlashMaps.removeAll(mapsToRemove);
			updateFlashMaps(allFlashMaps, request, response);
		}
	}

	return match;
}
 
@Test  // SPR-14651
public void resolveRedirectAttributesAtArgument() throws Exception {
	IllegalArgumentException ex = new IllegalArgumentException();
	HandlerMethod handlerMethod = new HandlerMethod(new RedirectAttributesController(), "handle");
	this.resolver.afterPropertiesSet();
	ModelAndView mav = this.resolver.resolveException(this.request, this.response, handlerMethod, ex);

	assertNotNull(mav);
	assertEquals("redirect:/", mav.getViewName());
	FlashMap flashMap = (FlashMap) this.request.getAttribute(DispatcherServlet.OUTPUT_FLASH_MAP_ATTRIBUTE);
	assertNotNull("output FlashMap should exist", flashMap);
	assertEquals("IllegalArgumentException", flashMap.get("exceptionClassName"));
}
 
@Test
public void retrieveAndUpdateMatchByPath() {
	FlashMap flashMap = new FlashMap();
	flashMap.put("key", "value");
	flashMap.setTargetRequestPath("/path");

	this.flashMapManager.setFlashMaps(Arrays.asList(flashMap));

	this.request.setRequestURI("/path");
	FlashMap inputFlashMap = this.flashMapManager.retrieveAndUpdate(this.request, this.response);

	assertEquals(flashMap, inputFlashMap);
}
 
@Test
public void retrieveAndUpdateMatchByOriginatingPath() {
	FlashMap flashMap = new FlashMap();
	flashMap.put("key", "value");
	flashMap.setTargetRequestPath("/accounts");

	this.flashMapManager.setFlashMaps(Arrays.asList(flashMap));

	this.request.setAttribute(WebUtils.FORWARD_REQUEST_URI_ATTRIBUTE, "/accounts");
	this.request.setRequestURI("/mvc/accounts");
	FlashMap inputFlashMap = this.flashMapManager.retrieveAndUpdate(this.request, this.response);

	assertEquals(flashMap, inputFlashMap);
	assertEquals("Input FlashMap should have been removed", 0, this.flashMapManager.getFlashMaps().size());
}
 
 同包方法