1

Struts 1.x と Ajax の間の単純な通信を開発しようとしています。「ユーザー名」と「パスワード」をAction-Classに送信する必要があるajaxコードを含むjspがあります。

AJAX コードは問題ありませんが、Action クラスは AJAX の応答を取得しません。
Q: Action-Class がリクエストを受け取っていないことは、どのようにわかりますか?
A: Action-Class に System.out.println("...") を書き込んだため、アプリケーションのテスト中には使用されません。

これもAJAXなしで試しました。データをAction-Classに送信するjspへの通常の「フォーム」だけです。あります、問題なく動作します。データを取得し、println("...") のメッセージを出力します。

私の質問は、Action-Class が AJAX の要求を取得しないのはなぜですか?

ここにいくつかのコードスニペットがあります:

///JSP - Ajax スクリプト

<script type="text/javascript"> 
        var resultMsg = "";
        var xmlHttp;

        function doAjaxPost() {

            resultMsg = "";
            var name = document.getElementById("username").value;               
            var pw = document.getElementById("password").value;
            //alert(resultMsg);
            var url = "/Index.do?username=" + name + "&password=" + pw;
            document.getElementById("responseMessage").innerHTML ="";
            document.getElementById("responseMessage").innerHTML += "<br>start doAjaxPost()...\n";
            //alert(resultMsg);
            if (url != "") {
                if (window.XMLHttpRequest) { // Non-IE browsers
                    xmlHttp = new XMLHttpRequest();
                    document.getElementById("responseMessage").innerHTML += "<br>implement new XMLHttpRequest...\n";
                } else if (window.ActiveXObject) { // IE
                    xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
                    document.getElementById("responseMessage").innerHTML += "<br>implement new ActiveXObject(' Microsoft.XMLHTTP')...\n";
                }
                try {
                    document.getElementById("responseMessage").innerHTML += "<br>check state...\n";
                    xmlHttp.onreadystatechange = processMessage;
                    document.getElementById("responseMessage").innerHTML += "<br>open connection...\n";
                    xmlHttp.open("GET", url, true);
                    document.getElementById("responseMessage").innerHTML += "<br>send data...\n";
                    xmlHttp.send(null);
                    document.getElementById("responseMessage").innerHTML += "<br>...finished";
                } catch (e) {
                    document.getElementById("responseMessage").innerHTML += "<br>\n/////////" + e + "/////////\n\n";
                    alert(resultMsg);
                }
            }

        }

        function processMessage() {
            document.getElementById("responseMessage").innerHTML += "<br>\tpm: check state...\n";
            document.getElementById("responseMessage").innerHTML += "<br>\tpm: state:\t" + xmlHttp.readyState + "\n";
            //alert(resultMsg);
            if (xmlHttp.readyState == 4) { // Complete
                if (xmlHttp.status == 200) { // OK response
                    document.getElementById("responseMessage").innerHTML += "<br>\tpm: set textfield ...\n";
                    document.getElementById("username").value = "";
                    document.getElementById("responseMessage").innerHTML += "<br>\tpm: set <p>-tag ...\n";
                    document.getElementById("responseMessage").innerHTML = xmlHttp.responseText;
                }else{
                    document.getElementById("responseMessage").innerHTML += "<br>No response: "+xmlHttp.status;
                }
            }else{
                document.getElementById("responseMessage").innerHTML += "<br>State not ready: "+xmlHttp.readyState;
            }
        }
    </script>

///struts-config.xml

<!-- Form mapping -->   
<form-beans>
    <form-bean name="indexForm" type="com.name.forms.IndexForm"/>
</form-beans>

<!-- Action mapping -->
<action-mappings>
    <action name="indexForm" path="/Index" type="com.name.actions.IndexAction"
        scope="request" parameter="/index.jsp" />

///IndexAction.java クラス

public ActionForward execute(ActionMapping mapping, ActionForm form,
        HttpServletRequest request, HttpServletResponse response)
        throws Exception {
    IndexForm ajaxForm = (IndexForm) form;
    System.out.println("Start IndexAction...");
    // response.setContentType("text/text;charset=utf-8");
    // response.setHeader("cache-control", "no-cache");
    PrintWriter out = response.getWriter();
    // String content = (String) request.getParameter("name");
    out.println("Hello " + ajaxForm.getUsername()+"<br>Ur PW:"+ajaxForm.getPassword());
    out.flush();
    return null;
}

///JSP から生成されたメッセージ (firefox でテスト中)
start doAjaxPost()...
httpReq を実装...
状態を確認...
接続を開く...
pm: 状態を確認... ///pm は、 jsp の関数 processMessage()
pm: 状態: 1 状態 の
準備ができていません: 1
データの送信...
...終了しました
pm: 状態の確認...
pm: 状態: 2
準備ができていない状態: 2
pm: 状態の確認...
午後: 状態: 3 状態の
準備ができていません: 3
午後: 状態を確認してください...
pm: 状態: 4
応答なし: 404

前に言ったように、Eclipse コンソールは Action-Class からのメッセージを出力しなかったため、Action-Class は AJAX の要求を受け取っていないという考えに至りました。

ajaxなしで動作し、問題が見えないので不思議です...誰かが私を助けてくれることを願っています。そして私の下手な英語でごめんなさい:S

4

0 に答える 0