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