Printemps 3 MVC Poignée multiple Soumettre avec un contrôleur.
Je développe une page JSP avec plusieurs formulaires. 1) Rechercher le client, 2) Produit de recherche, 3) Imprimer quelque chose, etc. J'ai un formulaire différent objet lié attaché à chaque formulaire et que mon code de contrôleur ressemble au ci-dessous p> Ci-dessus ne fonctionne certainement pas comme je supposais que ce serait. Je reçois une exception disant 'Méthode de requête' post 'non pris en charge " b>. Si je n'ai qu'une seule méthode postale à l'intérieur du contrôleur ci-dessus, disons les produits de recherche qu'il fonctionne bien. Mais ce ne sera pas avec plus d'une méthode avec Post. J'ai également essayé d'ajouter des paramètres cachés dans JSP et de modifier les signatures de méthode similaires à ci-dessous pour obtenir la même exception à nouveau pour obtenir la même exception à nouveau. P> @RequestMapping(method = RequestMethod.POST, params="pageAction=searchProduct")
public ModelAndView searchProducts(@ModelAttribute("productSearch") ProductSearchCriteria productSearchCriteria,
BindingResult result, SessionStatus status) {
//Do Product search
return modelAndView;
}
4 Réponses :
Lorsque vous avez plusieurs formulaires, pourquoi ne mappez-vous pas les trois formes sur différentes URL?
@RequestMapping("/products") public ModelAndView searchProducts(..) @RequestMapping("/customers") public ModelAndView searchCustomers(..)
Merci. Je l'ai déjà essayé, mais Tomcat a continué à se plaindre "Ressources demandées non disponibles". Je suis sûr que le problème réside dans web.xml où mon mappage d'URL de servlet est uniquement
@TMAN - AH, si vous avez mappé le servlet Dispatcher à *. Faites code>, alors cela ne fonctionnera pas. Une autre façon est de la cartographier sur
/ code>, de sorte que tout soit géré au printemps.
Merci Bozho, j'ai essayé cette approche mais quelque chose ne fonctionne pas pour moi. Bien que j'ai trouvé la solution de travail différente, je cherche toujours où j'ai mal tourné avec cette approche. Je vais mettre à jour le texte de la question si je reçois aussi que ce truc fonctionne aussi. À votre santé.
Vos mappages ne sont pas complètement corrects @Tman:
Les mappages dans web.xml sont pour obtenir un servlet Dispatcher à ressort pour gérer votre demande - par exemple. Comme dans votre cas: p>
@RequestMapping(method = RequestMethod.GET) @RequestMapping(method = RequestMethod.POST)
Le contrôleur peut avoir une cartographie, comme dans votre cas: p>
@Controller @RequestMapping (valeur = "/ recherche.do") p> li> ol>
mais où vous avez mal tourné est dans la demande de demande du contrôleur: p> la .do à la fin de la demande ne doit pas être là, comme Il est purement du servlet Dispatcher à appeler, une fois que cela est invoqué, il gérera l'envoi de la méthode du contrôleur correct, donc votre appel à /rsearch.do vous retrouvera avec le contrôleur. P> MAINTENANT, chaque méthode peut être annotée avec requestmission, comme dans votre cas, avec une requestMethod Atribute de demande de demande, spécifiant si vous souhaitez expédier à la méthode en cas de poteau ou à obtenir: P>
@Controller
@RequestMapping(value="/search")
Hmmm .. Merci d'une explication très détaillée et utile. Cela précisait peu de confusions. Malheureusement, je suis toujours confronté au même dilemme. J'ai un jsp appelé Search.jsp mappé sur URL> Search.do. Cette page a trois formes et en fonction de la formulaire que vous soumettez vous voir le résultat différent sur cette même page. Search.jsp> Search.do. J'ai appris à la fois de @bozho et de vos réponses et j'ai essayé de soumettre mes formulaires à différentes URL. Recherche / Client (incorrect je pense) et recherchez / client.do (devrait fonctionner?) Mais Tomcat a gardé gémissant la "ressource demandée non trouvée". Je suis excitée.
Le 404 n'est pas pour le contrôleur, je suppose que ceci est pour la vue maintenant, avez-vous validé que la vue est correctement configurée - pour par exemple, par exemple.
Oui, j'ai la similarité de configuration que vous avez décrite, différence étant mon point de vue que résolveur Bean utilise la classe URLBASEDViewSolver. Ce serait-il un problème avec cela? J'ai résolu mon problème avec les params = "Pageaction = RechercheProduct", mais il serait très pratique de comprendre ce que je fais mal ici avec ce tour de l'URL populaire.
Nice Point (3) En combinaison avec le champ de forme cachée: je cherchais une solution comme ça.
J'ai eu le même problème: deux formes (registre et contact) sur la même page avec deux boutons Soumettre. Chaque formulaire a sa propre validation par printemps.
J'ai réussi à le faire dans un contrôleur: p> J'ai besoin de créer un nouveau formulaire (contact ou registre) et mettez-le dans le modèle lorsque la validation est échouée car la vue "ContactOrregister" a besoin de formulaires à afficher. Ainsi, lorsque le formulaire "Contact" a été soumis et a des erreurs, le contenu du formulaire "registre" sera effacé. Cette façon convient à moi. P> Le contacteurRregister.jsp contient les deux formulaires avec une action différente: p>
Vous pouvez écrire p>
@RequestMapping (méthode = {requestmethod.get, requestmethod.post}) code> p> blockQuote>
Lorsque vous utilisez plusieurs méthodes sur le même contrôleur. Ceci est utile lorsque parfois l'utilisateur souhaite soumettre les données à l'aide de get ou lorsque vous utilisez
retour "Transférer: URL"; code> d'un autre contrôleur. P>
Êtes-vous une approche sûre avec le champ caché ne fonctionne pas?
Oui en effet. Je suis déconcerté pourquoi cela n'a pas fonctionné. J'ai trouvé une question similaire ici avec la réponse en utilisant la technique des mêmes params = "nom = valeur". Beaucoup de gens ont voté et ce doit être le moyen de clouer ceci.
Très étrange, ça devrait marcher.
@Axtavt l'a fait fonctionner. C'était tellement douloureusement évident une erreur que je souhaite m'enterrer à la honte. Mon paramètre caché a été défini comme Il doit être . Le doute que vous avez exprimé m'a fait de revenir encore et encore jusqu'à ce qu'il me frappe enfin. Je n'ai pas assez de privilèges pour vous voter, mais j'apprécie vraiment votre aide. Merci.