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

最初のドロップダウンの変更時に、db に ajax リクエストを送信します。これは既に行ったことです。したがって、2 番目のドロップダウンに実際に入力されるように、jsp で受け取った応答を記述する必要があります。

サーブレットが応答するには、応答オブジェクトを使用し、印刷メソッドを使用して応答を書き込む必要があります。

ドロップダウンでオプションを動的に生成する方法の手がかりはここにあります

document.getElementById(yourselecttagid); を使用します。上記の返されたタグに、appendChild メソッドを使用してオプションを追加します。

さて、サーブレットが応答を返すので、responseText を使用して、必要な場所に表示します...スクリプトレットを使用して jsp で

于 2013-05-18T16:49:48.380 に答える
1

あなたはすべてを正しく行っていると思います。また、上記で提案したように、リクエストをリダイレクトするのではなく、リクエストを転送する必要があります。

間違っている点は、XMLHttpRequest のオブジェクトをxhr作って変数を使って参照してリクエストしているのですが、その時のレスポンスを処理しているときは変数の状態をチェックしているxmlhttpので、どうすればいいですか?変数xmlhttpをに置き換えることですxhr

何か問題が発生した場合は、お気軽にお問い合わせください。

于 2013-05-18T16:26:57.200 に答える
1

RequestDispatcher を使用して、応答と要求を含めたり転送したりします。扱いやすいでしょう。

于 2013-05-19T10:35:10.733 に答える
0

おそらくresponse.sendDirectメソッドの意味を誤解していると思います。その方法は

適切なヘッダーとコンテンツ本文を設定して、クライアントを別の URL にリダイレクトします。

詳細については、SRV.5.4 を参照してください。

したがって、そのメソッドを使用すると、応答が解決され、クライアント (ブラウザー) が応答を受信すると、設定した URL にリダイレクトされます。jsp が受信するのは、ブラウザーからの新しい新しい要求です。

于 2013-05-18T15:52:58.813 に答える