2010-10-01 22 views
0

J'ai hérité d'un site Web développé à l'aide de Struts 1.2 dont j'ai besoin pour faire des mises à jour. Pour l'une des mises à jour, j'ai besoin de définir une variable de session basée sur une valeur sélectionnée dans une liste déroulante créée dynamiquement (en utilisant des entretoises) lorsque l'utilisateur clique sur un bouton. La façon dont j'essaye d'accomplir cette tâche est en utilisant la propriété 'onclick' de mon bouton pour appeler une fonction JavaScript qui utilise AJAX pour faire un appel asynchrone à une classe Action Struts.Définition d'une variable de session avec Struts 1.x et AJAX

J'ai implémenté cette solution avec succès, cependant, je suis confronté à un problème qui survient sporadiquement. Pour la plupart, lorsque je clique sur mon bouton, la variable de session semble être réglée correctement. Toutefois, occasionnellement, la variable de session n'est pas définie/réinitialisée. La nature sporadique de cette question est ce qui me rejette. Il semble que le bloc de code AJAX soit appelé et traité (renvoyant readyState = 4 et status = 200), cependant, la logique des struts Java N'EST PAS entrée. Le code est ci-dessous.

fonction AJAX JavaScript:

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

}

Merci pour l'aide! -Josh

+0

Problème résolu. Il s'avère que c'était un problème de mise en cache du navigateur avec la requête AJAX. IE (mon environnement de test) met automatiquement en cache la requête AJAX. J'ai corrigé le problème en ajoutant la ligne de code suivante: response.setHeader ("Cache-Control", "no-cache"); – Josh

Répondre

1

Problème résolu. Il s'avère que c'était un problème de mise en cache du navigateur avec la requête AJAX. IE (mon environnement de test) met automatiquement en cache la requête AJAX. J'ai corrigé le problème en ajoutant la ligne de code suivante:

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