0

jsp ページで、sessionId != "null" を取得した場合にのみ、テキスト エリア、テキスト フィールド、送信ボタンを含む div を表示しました。

また、ウィンドウを閉じてセッションをログアウトするための確認アラートボックスがあります...

しかし、sessionId、userIdなどの値を取得しようとしたり、startChatまたは送信ボタンを押したときにサーバーにメッセージを送信しようとすると、毎回同じアラートが表示されます...私のJspページでは、

<div id="login">
<form id="indexForm" name="indexForm" action="LoginAction" method="post">
<table>
    <tr>
        <td id="fname" class="fontStyle">First Name :</td>
        <td id="fvalue"><input type="text" id="firstname"
            name="firstname" /></td>
        <td id="lname" class="fontStyle">Last Name :</td>
        <td id="lvalue"><input type="text" id="lastname" name="lastname" /></td>
    </tr>
    <tr>
        <td colspan="4" id="err1" style="color: red">&nbsp;</td>

    </tr>
    <tr>
        <td id="email_id" class="fontStyle">Email Id&nbsp;&nbsp; &nbsp;:</td>
        <td><input type="text" id="email" name="email" /></td>
        <td id="sub" class="fontStyle">Subject
        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:</td>
        <td><input type="text" id="subject" name="subject" /></td>
    </tr>

    <tr>
        <td colspan="4">&nbsp;</td>
    </tr>

    <tr>
        <td colspan="4" id="err2" style="color: red">&nbsp;</td>
    </tr>

    <tr>
        <td colspan="4">&nbsp;</td>
    </tr>

    <tr>
        <td></td>
        <td>
        <center><a id="button" href="javascript:getValues();">Start
        chat</a></center>
        </td>
        <td>
        <center><a id="button" href="javascript:logout();">Stop
        chat</a></center>
        </td>
        <td></td>
    </tr>

</table>

</form>
</div>

<div style="display: none;" id="div">
<div><textarea id="textarea" rows="10"></textarea></div>
<div>
<table>
    <tr>
        <td id="msg" class="fontStyle">message :</td>
        <td id="msgvalue"><input size="40" type="text" id="message"
            onkeydown="enterKey()" /></td>
        <td style="width: 5%;"></td>
        <td><!-- <input type="button" value="send" onclick="sendMessage()" /> -->
        <a id="button3" href="javascript:sendMessage();">Send</a></td>
    </tr>
</table>
</div>
</div>

私のJavaScriptでは、

window.onbeforeunload = function () {

      return  "Are you Sure want to LOGOUT the session ?";
};

window.onunload = function () {

        if((sessionId != null)&&(sessionId!="null")&& (sessionId != ""))
            logout();
};

function sendMessage(){

    message = document.getElementById("message").value;
    document.getElementById("message").innerText = "";
    try
    {
        xmlhttp.onreadystatechange=function()
        {
            //alert("Status : "+xmlhttp.status+"\nreadyState : "+xmlhttp.readyState);
            if (xmlhttp.readyState==4 && xmlhttp.status==200)
            {


                var checkMsg = decodeURIComponent(xmlhttp.responseText.toString());
                if(checkMsg != "null" && checkMsg != null){
                    //document.getElementById("textarea").innerHTML +=  checkMsg;
                    if(textarea.value == "")
                        textarea.value = checkMsg;
                    else
                        textarea.value += "\n"+ checkMsg  ;
                }
            }
        };
        xmlhttp.open("POST","SendMessageAction?sessionId="+sessionId+"&userId="+userId+"&securekey="+secureKey+"&message="+encodeURIComponent(message)+"&sid"+Math.random(),true);
        xmlhttp.send();
    }
    catch(err)
    {
        alert(err.description);
    }
}

私のサーブレットでは、

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        PrintWriter out = response.getWriter();
        msg = request.getParameter("message");
        //System.out.println("msg -----> : "+msg);
        seckey = request.getParameter("securekey");
        uid = request.getParameter("userId");
        sessionId = request.getParameter("sessionId");
        //counter =Integer.parseInt(request.getParameter("counter"));
        counter = 1;
        protocol = ApplicationInfo.flexProtocol;

        message = new SendMessage();
        message.send(msg, seckey, uid, sessionId, counter, protocol);

        CustomerInfo customer = ApplicationInfo.customerDetails.get(uid);

        out.print(customer.getMessage());
        //System.out.println("msgDecoded -----> : "+msg);

    }

助けてください...ブラウジングウィンドウを閉じていることを除いて、毎回アラートを受け取る必要はありません...

4

2 に答える 2

1

次のいずれかを実行すると、イベントonbeforeunloadがトリガーされます。

Close the current window.
Navigate to another location by entering a new address or selecting a Favorite.
Click an anchor that refers to another document.
Invoke the anchor.click method.
Invoke the document.write method.
Invoke the document.close method.
Invoke the window.close method.
Invoke the window.navigate or NavigateAndFind method.
Invoke the location.replace method.
Invoke the location.reload method.
Specify a new value for the location.href property.
Submit a form to the address specified in the ACTION attribute via the INPUT type=submit control, or invoke the form.submit method.
Invoke the window.open method, providing the possible value _self for the window name.
Invoke the document.open method.
Click the Back, Forward, Refresh, or Home button.

onbeforeunload の MSDN の説明

于 2012-11-16T12:19:56.160 に答える
0

解決策は、

ボタンの代わりに、Javaスクリプトのイベントにアンカータグを使用しています。したがって、「window.onbeforeunload」は、イベントを新しいアドレスと見なします。今、私はアンカータグをボタンに変更し、うまく機能しています。

于 2012-11-16T15:20:08.933 に答える