无需打开页面即可重定向到弹簧mvc控制器

时间:2015-11-27 12:08:25

标签: javascript java spring-mvc

我试图将一些数据发送回我的应用程序,而无需离开现有页面。我宁愿不重新加载当前页面。

该应用程序已经有一个下载选项,按照我想要的方式工作...按钮的工作原理如下

<button type="button" onclick="javascript:window.location='/DownloadEndpoint?params'">Download</button>

这将转到下载csv文件并按原样保留当前页面的端点。

控制器具有void返回参数

RequestMapping(value = "/DownloadEndpoint")
public void csvDownload(HttpServletRequest request, HttpServletResponse response, @ModelAttribute(MODEL_ATTR_NAME) FacetedSearchRequestBean searchRequestBean, @PathVariable(value = PERSON_ID) String personId) throws IOException {

并编辑ResponseHeader以获取csv

protected void setCsvResponseHeaders(HttpServletResponse response, final String cvsSearchType) {
    response.setContentType("text/csv;charset=utf-8");
    response.setHeader("Content-Disposition", "attachment; filename=filename.csv");
}

当我尝试使用不同的控制器为自己的目的执行此操作时,如果不编辑响应标题,我会得到一个空白页

这是我在jsp中的按钮(几乎是副本)

<button type="button" onclick="javascript:window.location='${pageContext.request.contextPath}/FeedBack/Test'">Ok</button>

传递给此控制器

@RequestMapping(value = "/Test")
public void popUpTest(HttpServletRequest request, Model model) throws InterruptedException 
{
    System.out.println("Test");
}

这适用于将控制权发送到Test控制器但不是将当前页面留在浏览器中而是浏览器显示空白屏幕。

有没有办法编辑响应标头,不去任何地方或做任何事情,以便我可以执行我的应用程序代码,并将浏览器保留在调用页面上而不以任何方式刷新它?

1 个答案:

答案 0 :(得分:0)

你的问题在于

javascript:window.location

因为这会将浏览器的位置更改为其他页面。你可以改为进行ajax调用。

var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
        var response = JSON.parse(xmlhttp.responseText);
        //do something
    }
}
xmlhttp.open("GET", "your url here", true);
xmlhttp.send();

如果使用jQuery,则更容易。

        $.ajax({
            type: "GET",
            url: "url",
            success: function( response ){
                //do something
            }
        });