0

Struts 1.2を使用して開発されたWebサイトを継承しましたが、更新する必要があります。更新の1つとして、ユーザーがボタンをクリックしたときに動的に作成された(支柱を使用して)ドロップダウンボックスから選択された値に基づいてセッション変数を設定する必要があります。このタスクを実行しようとしている方法は、ボタンの「onclick」プロパティを使用して、AJAXを利用してstrutsActionクラスへの非同期呼び出しを行うJavaScript関数を呼び出すことです。

私はこのソリューションを正常に実装しましたが、散発的にしか発生しない問題が発生しています。ほとんどの場合、ボタンをクリックすると、セッション変数が正しく設定されているようです。ただし、セッション変数が設定/リセットされていない場合があります。この問題の散発的な性質は、私を失望させているものです。AJAXコードブロックが呼び出されて処理されているように見えますが(readyState=4およびstatus=200を返します)、JavaStrutsロジックは入力されていません。コードは以下のとおりです。

JavaScript AJAX関数:

function createTaskOpp() {
var selectedOpp = document.getElementById("oppId");
var url="setTaskSessionOpportunity.do?opp=" + selectedOpp.value;
var ajaxRequest;

try
{
    // Opera 8.0+, Firefox, Safari
    ajaxRequest = new XMLHttpRequest();
}
catch (e)
{
    // Internet Explorer Browsers
    try
    {
        ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
    }
    catch (e)
    {
        try
        {
            ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
        } 
        catch (e)
        {
            // Something went wrong while trying to create our HTTP object. Resubmit the current page.
            alert("Browser Error. Error creating Request Object: " + e);
            window.location ="taskConfiguration.do";
        }
    }
}
ajaxRequest.open("GET", url, true);
ajaxRequest.onreadystatechange = function() {

if (ajaxRequest.readyState == 4)
{
    if (ajaxRequest.status == 200) 
    {
        window.location ="saveTask.do";
    }

    else  {
        window.location ="taskConfiguration.do";
    }
}
};
ajaxRequest.send(null); }

Strutsアクション:

public class SetTaskSessionOpportunityAction extends Action {
public ActionForward execute( ActionMapping mapping, ActionForm form,
        HttpServletRequest request, HttpServletResponse response)
{
    System.out.println("*****************");
    System.out.println("In SetTaskOpp AJAX -Beginning");
    HttpSession session = request.getSession();
    String taskOpp = request.getParameter("opp");
    session.setAttribute("task_opportunity", taskOpp);
    ActionForward actionForward = new ActionForward("/viewTask.jsp");
    return actionForward;
}

}

助けてくれてありがとう!-ジョシュ

4

1 に答える 1

2

問題が解決しました。AJAXリクエストでのブラウザのキャッシュの問題であることが判明しました。IE(私のテスト環境)はAJAXリクエストを自動的にキャッシュします。次のコード行を追加して問題を修正しました。

response.setHeader("Cache-Control", "no-cache"); 
于 2010-10-11T08:57:19.443 に答える