Я унаследовал веб-сайт, разработанный с использованием 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