1

我需要通过对我之前触发的请求的响应来将控件检索回 Jsp。但我面临的问题是我无法在 jsp 中获得响应。

我浏览了几篇文章并尝试了一些建议,但似乎没有一个对我有用。请指出我的错误在哪里。

下面是我的尝试:

    protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        log.info("IN form doGet");
        request.setCharacterEncoding("utf-8");
        String selectedClass = request.getParameter("key");
        log.info(selectedClass);
        String[] section = null;
        DBHandler dbhandler = new DBHandler();
        dbhandler.makeConnection();
        if (true == dbhandler.verifyConnection()) {
            section = dbhandler.getSection(selectedClass);
        }
        for (String str : section) {
            log.info(str);
        }
        Logger log;
        if (null != section) {
            request.setAttribute(Appconstants.Section, section);
        }
        response.setHeader("Access-Control-Allow-Origin", "*");
        response.sendRedirect("/ReportFetcher/WebContent/FirstJSP.jsp");
//      RequestDispatcher view = request.getRequestDispatcher("/First.jsp");
//      view.forward(request, response);
    }

以下是jsp部分:

function funcOnChange() {
    var index = document.detail.Class.selectedIndex;
    var valueSelected = document.detail.Class.options[index].value;
    var xhr = new XMLHttpRequest();

    xhr.onreadystatechange = function()
    {
        // Check to see if this state change was "request complete", and
        // there was no server error (404 Not Found, 500 Server Error, etc)
        if (xmlhttp.readyState==4 && xmlhttp.status==200) 
        {
            var substring=xmlHttp.responseText;
            alert("Alert Dialog! Gaurav");
        }
        if (xmlhttp.readyState == 404){
            alert("404 error");
        }
        if (xmlhttp.readyState == 500){
            alert("500 error");
        }

    }
    xhr.open('GET', 'http://localhost:8080/ReportFetcher/FormHandler?key='+encodeURIComponent(valueSelected), true);
    xhr.send(null);
    return false;
}
4

4 回答 4

1

Onchange 您的第一个下拉菜单向您的 db 发出 ajax 请求。这就是您已经完成的操作。因此,现在您需要编写在您的 jsp 中收到的响应,以便它实际填充第二个下拉列表。

要让 servlet 做出响应,您需要使用响应对象并使用打印方法来编写响应。

这是如何在下拉列表中动态生成选项的线索

使用 document.getElementById(yourselecttagid); 并使用 appendChild 方法向上面返回的标签添加选项。

好的,现在 servlet 使用 responseText 返回响应并在任何你想显示的地方显示它...在你的 jsp 中使用 scriplet 像这样

于 2013-05-18T16:49:48.380 回答
1

使用 RequestDispatcher 包含或转发您的响应和请求。这将很容易处理。

于 2013-05-19T10:35:10.733 回答
1

我认为您所做的一切都是正确的,并且如上所述,您还应该需要转发请求而不是重定向请求。

您出错的地方是您正在制作 XMLHttpRequest 的对象并xhr在发出请求时使用变量引用它,但是当您当时处理响应时,您正在检查变量的状态xmlhttp,所以您需要做什么是xmlhttp用替换变量xhr

如果您遇到任何问题,请随时提出。

于 2013-05-18T16:26:57.200 回答
0

我想你可能误解了 response.sendDirect 方法的含义。该方法将

设置适当的标头和内容正文以将客户端重定向到不同的 URL。

有关详细信息,请参阅 SRV.5.4。

因此,当您涉及该方法时,响应已解决,并且当客户端(浏览器)收到响应时,它会重定向到您设置的 URL。jsp 将收到来自浏览器的全新请求。

于 2013-05-18T15:52:58.813 回答