J'avais un fichier JSP avec une balise c: redirect qui redirigeait le long d'un utilisateur vers une autre page.Qu'est-ce qui pourrait causer cette différence IllegalStateException dans JSP/Spring?
<!-- Yes, I know this loop is probably unnecessary, but I'm not fluent in jsp and have determined it is not the problem. :) -->
<c:if test="${cmd.numberOfResults == 1}">
<c:forEach items="${cmd.matches}" var="someVar">
<c:redirect url="/loadThatResultInfo.html"/>
</c:forEach>
</c:if>
L'ancienne implémentation de l'objet de commande doit être mise à jour (là où j'interviens). La façon dont je le fais est en créant un objet générique "resultat de recherche" qui contient une instance de cet ancien objet (pour l'instant). Je reçois cette instance par une propriété dans cette classe générique, donc mon code est maintenant ceci:
<c:if test="${cmd.genericSearchObject.numberOfResults == 1}">
<c:forEach items="${cmd.genericSearchObject.matches}" var="acct">
<jsp:forward page="/loadThatResultInfo.html"/> <!-- new try! -->
<c:redirect url="/loadThatResultInfo.html"/> <!-- old try... -->
<% response.sendRedirect("/loadThatResultInfo.html"); %> <! new try! -->
</c:forEach>
</c:if>
Chacun de ces trois essais tout résultat dans IllegalStateExceptions de quelque sorte. Pourquoi cette modification entraîne-t-elle l'exception, en particulier si l'on considère que les lignes concernées - la redirection, et non les instances de classes modifiées/liées - sont à l'origine du problème?
Les modifications back-end ont été apportées en conséquence, référençant la propriété dans ma nouvelle classe englobante "generic" pour satisfaire l'ancienne fonctionnalité. Je sais que cela fonctionne parce que toutes les fonctionnalités connexes, à côté de ce que j'écris, fonctionne.
La recherche en ligne indique: - Je ne peux pas rediriger/transférer après qu'une soumission a déjà été soumise. Alors, comment étais-je capable de le faire avant? - La tentative de vidage d'un tampon déjà effacé provoque cela. Qu'est-ce qui a changé, qui l'efface maintenant par opposition à l'ancienne (première) mise en œuvre? - La taille du tampon de la page doit être plus grande. C'EST un que je ne comprends pas et aimerais vraiment pour la communauté de stackoverflow pour adresser; Je peux voir ma nouvelle classe causer des changements de taille qui auraient besoin de changements à traiter.
------- UNE AUTRE RÉPONSE! Tout d'abord, TOUJOURS ÉTABLIR LA SITUATION DANS LE CODE comme décrit par la réponse marquée. Cependant ... si vous êtes coincé et ne voulez pas faire cela, voici une solution rapide: javascript!
<script type="text/javascript">
location='./yourPageToGoTo.html'
</script>
Les traces de pile et les textes d'exception sont utiles, ne les ignorez pas. – skaffman
Merci pour votre contribution, skaffman. C'est pourquoi j'avais inclus la dernière partie de ma réponse, étant que j'étais capable de changer la trace de la pile plusieurs fois en fonction de laquelle de ces explications je me suis concentré. Ne vous inquiétez pas si cela ne vous suffit pas; BalusC l'a apparemment trouvé suffisant. – Danny