0

onclick関数を使用してjavascript関数を参照しているログインフォームがjspファイルにあります。

javascript関数は、アクションメソッドを呼び出して承認プロセスを実行し、結果を返すことになっています。

結果は、エラーのメッセージ(ユーザー名が間違っている)または(ユーザー名またはパスワードが間違っている)、または新しいページに移動するための成功メッセージ( "SUCCESS"を返す)である可能性があります。

アクションを呼び出すときはいつでも、alert(xmlHttp.status)は「未定義」を受信したことを示しますが、正しいアクションを呼び出していますが、問題は応答の受信にあります。

struts.xmlをどのように定義する必要がありますか?多分問題はそれによって引き起こされます。

<s:submit onclick="auth(this.form)" />

xmlhttp.open("get","Login.action?usrname="+usr+"&pass="+psw,false);
xmlhttp.send();
4

1 に答える 1

1

このようにする必要があります(Struts2、JSON、Ajax)

struts.xml

<package name="default"  extends="json-default">
        <action name="ValidateUserName" class="com.controller.JSONUserAction">          
            <result type="json"></result>
        </action>
</package>

コントローラ クラス コード JSONUserAction.java (あなたの場合は Login.java)

package com.controller;

import com.opensymphony.xwork2.ActionSupport;

public class JSONUserAction extends ActionSupport {

    private String username;
    private String result;  

    // all struts logic here
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }

    public String getResult() {
        return result;
    }
    public void setResult(String result) {
        this.result = result;
    }

    public String execute() {
        if(username.equalsIgnoreCase("admin")) {
            result = "VALID";
        } else {
            result = "INVALID";
        }
        System.out.println("username :  " + username + "======== result :" + result);
        return ActionSupport.SUCCESS; 
    }

}

login.jsp コード

<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<script type="text/javascript">

    var http;
    if(window.XMLHttpRequest) {
        http = new XMLHttpRequest();
    } else {
        http = new ActiveXObject("Microsoft.XMLHTTP");
    }

    function AuthenticateUser() {               
        var username = document.getElementById("username").value;
        var password = document.getElementById("password").value;

        http.open("POST", "ValidateUserName.action", true);
        http.setRequestHeader("Content-type","application/x-www-form-urlencoded");
        http.onreadystatechange = ValidUser;
        http.send("username="+username +"&password="+password);
    }

    function ValidUser() {      
        if(http.readyState == 4 && http.status == 200) {
            var jsonOP  = eval ("(" + http.responseText + ")");         
            var result = jsonOP.result;         
            document.getElementById("message").innerHTML = result;
            if(result == "VALID") {
                //redirect to welcome page                              
            } 
        }
    }

</script>
</head>

<body>

<s:form action="Welcome">
    <div id="message"></div>
    <s:textfield name="username" label="Username" id="username" />
    <s:password name="password" label="Password" id="password"/>
    <s:submit id="login" onClick="AuthenticateUser();"/>
</s:form>

</body>
</html>
于 2012-09-20T10:01:24.717 に答える