Установка переменной сеанса с помощью Struts 1.x и AJAX - PullRequest
0 голосов
/ 01 октября 2010

Я унаследовал веб-сайт, разработанный с использованием Struts 1.2, и мне нужно сделать некоторые обновления. Для одного из обновлений мне нужно установить переменную сеанса на основе значения, выбранного из динамически создаваемого (с помощью распорок) раскрывающегося списка, когда пользователь нажимает кнопку. Я пытаюсь выполнить эту задачу, используя свойство «onclick» моей кнопки, чтобы вызвать функцию JavaScript, которая использует AJAX для выполнения асинхронного вызова класса Action Struts.

Я успешно внедрил это решение, однако столкнулся с проблемой, которая возникает только время от времени. По большей части, когда я нажимаю на мою кнопку, переменная сеанса, кажется, установлена ​​правильно. Однако иногда переменная сеанса не устанавливается / сбрасывается. Спорадический характер этой проблемы - это то, что сбивает меня с толку. Похоже, кодовый блок AJAX вызывается и обрабатывается (возвращая readyState = 4 и status = 200), однако логика Java-структур НЕ вводится. Код ниже.

Функция 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); }

Распорки Действие:

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

1 Ответ

2 голосов
/ 11 октября 2010

Проблема решена. Оказывается, это была проблема с кэшированием в браузере с помощью запроса AJAX. IE (моя тестовая среда) автоматически кэширует AJAX-запрос. Я исправил проблему, добавив следующую строку кода:

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