Redirection en Spring MVC
Pourquoi ne puis-je pas obtenir que cela fonctionne dans mon Contrôleur
@RequestMapping(method = RequestMethod.POST)
public String onSubmit(
Model model,
@ModelAttribute("form") Form form,
BindingResult result, HttpServletRequest request)
throws IOException, WriteException, BiffException {
if (result.hasErrors()) {
return "redirect:index.html";
}
}
J'obtiens:
javax.servlet.ServletException: Pourrait
pas de résoudre la vue avec le nom
'redirect:index.html' dans le servlet avec
le nom de "répartiteur"
org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1042)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:798)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:716)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:560)
javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.netbeans.les modules.web.moniteur.serveur.MonitorFilter.doFilter(MonitorFilter.java:390)
J'ai eu que cela fonctionne avant. Pourquoi pas maintenant?
- L'exception se produire, avant ou après la redirection, c'est d'envoyer au navigateur?
- Il est également intéressant de souligner que BindingResult ne seront pas conservées après la redirection. En d'autres termes, si vous rediriger vers votre formulaire de saisie (dans cet exemple index.html) les erreurs ne s'affiche pas comme ils sont perdus à cause de la redirection. J'ai eu à résoudre ce juste avant d'utiliser un HandlerInterceptor.
- Avez-vous un exemple de votre HandlerInterceptor?
Vous devez vous connecter pour publier un commentaire.
Essayer, cela devrait fonctionner si vous avez configuré votre point de vue résolveur correctement
Également noter que
redirect:
etforward:
préfixes sont traitées parUrlBasedViewResolver
, de sorte que vous devez avoir au moins une sous-classe deUrlBasedViewResolver
entre votre point de vue résolveurs, commeInternalResourceViewResolver
.Pour compléter les réponses, Spring MVC utilise viewResolver(par exemple, comme axtavt metionned, InternalResourceViewResolver) pour obtenir le point de vue spécifique. Par conséquent, la première étape est de s'assurer qu'une viewResolver est configuré.
Deuxièmement, vous devriez prêter attention à l'url de redirection(redirection ou en avant). Une url commençant par "/" signifie que c'est une url absolue dans l'application. Comme Jigar dit,
devrait fonctionner. Si votre vue se trouve dans la racine de l'application, le Printemps peut le trouver. Si une url sans "/", telle que la votre question, cela signifie une url relative. Il explique pourquoi il a travaillé avant et de ne pas travailler maintenant. Si votre page d'appeler "rediriger" localise dans la racine par chance, il fonctionne. Si pas, le Printemps ne peut pas trouver le point de vue et il ne fonctionne pas.
Voici le code source de la méthode de RedirectView de Printemps
essayer de changer cela dans votre dispatcher-servlet.xml
Ce qui se passe est clairement expliqué ici http://projects.nigelsim.org/wiki/RedirectWithSpringWebMvc
Essayer cette
Then HttpServletResponse (then a source link), is a system that does x, y, z, and you can use for x...
Axtavt réponse est correcte.
C'est comment votre résolveur doit ressembler (annotations de base):
Bien évidemment, le nom de votre répertoire de vues doit changer en fonction de votre projet.
Il est possible de définir un
urlBasedViewResolver
dans votre fichier de propriétés:je sais c'est tard , mais vous devriez essayer de les rediriger vers un chemin d'accès et non à un fichier ha ha