J'ai un fragment de page HTML avec un formulaire et 2 boutons:
<form action="#" data-th-action="@{/action/edit}" data-th-object="${model}" method="post">
<button type="submit" name="action" value="save">save</button>
<button type="submit" name="action" value="cancel">cancel</button>
</form>
Et le contrôleur:
@RequestMapping(value="/edit", method=RequestMethod.POST)
public ModelAndView edit(@ModelAttribute SomeModel model,
@RequestParam(value="action", required=true) String action) {
if (action.equals("save")) {
// do something here
}
if (action.equals("cancel")) {
// do another thing
}
return modelAndView;
}
Cela fonctionne bien, mais si j'ai plus de bouton, je dois ajouter plus d'instructions if
pour vérifier la chaîne action
. Existe-t-il une autre façon de créer ne action pour chaque bouton dans le formulaire?
Vous pouvez créer des méthodes distinctes avec différents @RequestMappings
en utilisant la variable params.
@RequestMapping(value="/edit", method=RequestMethod.POST, params="action=save")
public ModelAndView save() {}
@RequestMapping(value="/edit", method=RequestMethod.POST, params="action=cancel")
public ModelAndView cancel() {}
Au lieu d'un cas-if, vous pourriez avoir un cas de commutateur, si vous ne souhaitez pas prendre toutes les options en tant que nouveau mappage de demande.
@RequestMapping(value="/edit", method=RequestMethod.POST)
public ModelAndView edit(@ModelAttribute SomeModel model,
@RequestParam(value="action", required=true) String action) {
switch(action) {
case "save":
// do stuff
break;
case "cancel":
// do stuff
break;
case "newthing":
// do stuff
break;
default:
// do stuff
break;
}
}