簡體   English   中英

Spring MVC - 重定向后保留請求參數

[英]Spring MVC - keep request parameters after redirect

我有一種情況,我的前端開發人員想要為每個鏈接添加幾個參數。 他需要那些作為鏈接指向的視圖中的參數。

每個@Controller方法只返回字符串。 這由使用所述String作為viewname的標准viewresolver支持:

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"
        p:prefix="/WEB-INF/jsp/" p:suffix=".jsp" />

只要Controller返回redirect:但是,原始請求中的請求參數將被刪除,並且無法在.jsp中訪問它們

是否有任何簡潔的方法來確保即使redirect: 'ing,url參數出現在重定向到的視圖中?

你需要一個閃存范圍。 它已經從3.1.RC1春季開始實施 - 請參閱請求

由於Bozho建議的解決方案對我的需求不太滿意,我寫了一個過濾器,它完全符合我的要求。 不確定在將來的情況下是否會出現任何問題,但在此之前,請隨意使用我的實現:

/**
*
* @author Lennart Koester (University of Innsbruck, 2012)
*/
@Service
public class RedirectFilter implements Filter {

@Override
public void init(FilterConfig filterConfig) throws ServletException {
}

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

    String queryString = ((HttpServletRequest) request).getQueryString();
    if (queryString != null) {
        RedirectAwareResponseWrapper res = new RedirectAwareResponseWrapper((HttpServletResponse) response);
        chain.doFilter(request, res);
        if (res.isRedirected()) {
            ((HttpServletResponse) response).sendRedirect(res.getLocation() + "?" + queryString);
        }
    } else {
        chain.doFilter(request, response);
    }
}

@Override
public void destroy() {
}

class RedirectAwareResponseWrapper extends HttpServletResponseWrapper {

    private boolean redirected = false;
    private String location;

    public RedirectAwareResponseWrapper(HttpServletResponse response) {
        super(response);
    }

    @Override
    public void sendRedirect(String location) throws IOException {
        redirected = true;
        this.location = location;
        //IMPORTANT: don't call super() here
    }

    public boolean isRedirected() {
        return redirected;
    }

    public String getLocation() {
        return location;
    }

}
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM