2009-03-09 12 views
2

J'ai une JSP avec un contrôle d'arborescence Javascript et je veux que l'utilisateur puisse cacher ou montrer cet arbre sur simple pression d'un bouton et pour que ce changement d'état se fasse par d'autres pages visitées, c'est-à-dire si à la page A, l'utilisateur cache l'arbre, alors à la page B, l'arbre devrait rester caché et ainsi de suite jusqu'à ce que l'utilisateur décide d'afficher l'arbre. Pour cela, j'utilise AJAX pour définir une variable de session sur le serveur qui est vérifiée lors du chargement d'une page. Maintenant, cela fonctionne correctement lorsque la page en question n'a pas de chaîne de requête dans son URL.Problème avec la servlet JSP et Ajax

Mais avec une page avec une URL comme:

http://localhost:8084/myApp/myAppPage?myAppParam=0

Si j'invoque le spectacle/bouton cacher, je reçois une erreur Java NumberFormatException parce que la chaîne de requête est perdue. Mais manuellement recharger la page après cela montre la page avec l'arbre mis à jour.

Le code HTML de l'arbre est construit sur le serveur et affiché dans un div HTML sur chaque page. Je crois comprendre qu'AJAX est destiné à mettre à jour seulement une partie de la page et que la page est écrite de cette manière pour permettre uniquement la mise à jour du contenu d'une div. Mais je ne peux pas comprendre pourquoi la chaîne de requête est perdue.

Je me demande si l'AJAX essaie de forcer un rechargement complet?

Je sais que l'appel AJAX atteint la servlet correctement. Mais le servlet n'est pas configuré pour appeler une autre page.

Quelqu'un at-il déjà vu cela et connaissez-vous une solution de contournement?

Répondre

0

Sans voir le code impliqué, il est difficile de spéculer. Certaines choses à considérer:

  • Comment faites-vous la demande AJAX à savoir que vous utilisez un cadre établi tel que jQuery ou Prototype, ou avez-vous roulé votre propre?
  • Quel code se trouve derrière le bouton afficher/masquer?
  • Comment votre servlet répond-il à la demande?

Vous pouvez utiliser Firebug pour vérifier que vos requêtes AJAX sont correctes et l'enregistrement de votre servlet pour voir ce qui se passe (ou utiliser un débogueur bien sûr).

0

John

Merci pour votre réponse.

J'ai partiellement corrigé les choses maintenant et cela a été fait avec le déclenchement de l'Ajax à partir d'un bouton de formulaire qui doit aussi avoir fait un rafraîchissement de page implicite.

Martin O'Shea.

2

La chaîne de requête de l'URL de demande initiale ne sera pas transmise automatiquement à chaque fois que vous exécutez une requête ajaxical sur la réponse de la demande initiale. Vous devez l'ajouter vous-même à l'URL de la requête ajaxical. La chaîne de requête de la demande initiale est disponible par window.location.search.

var ajaxurl = '/someservlet' + window.location.search;