2010-10-01 32 views
0

我继承了一个使用Struts 1.2开发的网站,我需要对其进行一些更新。对于其中一个更新,我需要根据从用户单击按钮时动态创建的(使用struts)下拉框中选择的值来设置会话变量。我试图完成此任务的方式是使用按钮的'onclick'属性来调用JavaScript函数,该函数利用AJAX对struts Action类进行异步调用。使用Struts 1.x和AJAX设置会话变量

我已经成功实现了这个解决方案,但是,我遇到了偶尔出现的问题。大多数情况下,当我点击我的按钮会话变量似乎设置正确。但是,偶尔会话变量没有被设置/重置。这个问题的零星性是什么让我失望。它看起来像AJAX代码块被调用和处理(返回一个readyState = 4和状态= 200),但是,没有输入Java struts逻辑。代码如下。

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的Action:

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; 
} 

}

感谢您的帮助! -Josh

+0

问题已解决。事实证明这是AJAX请求的浏览器缓存问题。 IE(我的测试环境)自动缓存AJAX请求。我通过添加下面这行代码纠正了这个问题:response.setHeader(“Cache-Control”,“no-cache”); – Josh 2010-10-11 08:53:23

回答

1

问题解决了。事实证明这是AJAX请求的浏览器缓存问题。 IE(我的测试环境)自动缓存AJAX请求。我通过添加以下代码行更正了该问题:

response.setHeader("Cache-Control", "no-cache");