Tout d’abord, dites des excuses pour poser cette question répétée.
En fait, dans mon application printanière, j'ai user.jsp
et professional.jsp
voici mon User.jsp:
<form:form action="profile/user" modelAttribute="profile">
<div>
<jsp:include page="professional.jsp"></jsp:include>
</div>
</form:form>
Et voici mon professional.jsp:
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<%@ taglib prefix="c" uri="http://Java.Sun.com/jsp/jstl/core"%>
<fieldset id="profile_proffiesional">
<form:form action="profile/proffiesional" modelAttribute="PROFESSIONAL" method="POST">
<p>
<label for="position">Position</label>
<form:input path="position" tabindex="4" />
</p>
<p>
<label for="location">Location</label>
<form:input path="location" tabindex="5" />
</p>
<p>
<label for="description">Description</label>
<form:input path="description" tabindex="5" />
</p>
<p>
<input type="submit" value="Add">
</p>
</form:form>
</fieldset>
Et voici ma classe de contrôleur:
@Controller
@RequestMapping(value = "profile")
public class UserProfileController {
@Autowired
private UserService userService;
@Autowired
private SessionData sessionData;
@RequestMapping(value = "user", method = RequestMethod.GET)
public String user(Model model) throws Exception {
model.addAttribute("PROFESSIONAL", new UserProfessionalForm());
model.addAttribute("EDUCATIONAL", new UserEducationalForm());
model.addAttribute("AWARDS", new UserAwardsForm());
return "profile/user";
}
@RequestMapping(value = "proffessional", method = RequestMethod.POST)
public @ResponseBody
String forgotPassword(UserProfessionalForm professionalForm,
BindingResult result, Model model) {
UserProfileVO userProfileVO = new UserProfileVO();
userProfileVO.setUser(sessionData.getUser());
userService.saveUserProfile(userProfileVO);
model.addAttribute("professional", professionalForm);
return "Your Professional Details Updated";
}
}
Problem
est quand nous sommes Cliquez sur le bouton Add
dans professional.jsp
, il n'y a pas de réponse dans la console du serveur mais en dessous du message d'avertissement affiché:
29 Mar, 2013 1:03:51 PM org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver handleHttpRequestMethodNotSupported
WARNING: Request method 'POST' not supported
Pourquoi cet avertissement arrive? je suis déjà spécifié method = "POST" ..
S'il vous plaît aider ..
Votre user.jsp:
<form:form action="profile/proffesional" modelAttribute="PROFESSIONAL">
---
---
</form:form>
Dans votre classe de contrôleur:
(Faites-le comme un nom complet de méthode .. Ecoutez, je pense que vous êtes insérer un enregistrement dans la base de données.)
@RequestMapping(value = "proffessional", method = RequestMethod.POST)
public @ResponseBody
String proffessionalDetails(
@ModelAttribute UserProfessionalForm professionalForm,
BindingResult result, Model model) {
UserProfileVO userProfileVO = new UserProfileVO();
userProfileVO.setUser(sessionData.getUser());
userService.saveUserProfile(userProfileVO);
model.addAttribute("PROFESSIONAL", professionalForm);
return "Your Professional Details Updated";
}
Csrf étant activé dans mon fichier XML de sécurité sprint, je viens d'ajouter une ligne dans le formulaire:
<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}" />
De cette façon, j'ai pu soumettre le formulaire avec l'attribut model
.
En Jsp:
action="profile/proffiesional"
Dans le contrôleur
@RequestMapping(value = "proffessional", method = RequestMethod.POST)
Orthographe MisMatch!
Vous êtes une annotation missimg @ModelAttribute
pour UserProfessionalForm professionalForm
dans la méthode forgotPassword
.
@RequestMapping(value = "proffessional", method = RequestMethod.POST)
public @ResponseBody
String forgotPassword(@ModelAttribute UserProfessionalForm professionalForm,
BindingResult result, Model model) {
UserProfileVO userProfileVO = new UserProfileVO();
userProfileVO.setUser(sessionData.getUser());
userService.saveUserProfile(userProfileVO);
model.addAttribute("professional", professionalForm);
return "Your Professional Details Updated";
}
Essaye ça
@RequestMapping(value = "proffessional", method = RequestMethod.POST)
public @ResponseBody
String forgotPassword(@ModelAttribute("PROFESSIONAL") UserProfessionalForm professionalForm,
BindingResult result, Model model) {
UserProfileVO userProfileVO = new UserProfileVO();
userProfileVO.setUser(sessionData.getUser());
userService.saveUserProfile(userProfileVO);
model.addAttribute("professional", professionalForm);
return "Your Professional Details Updated";
}
Pour information, j'ai supprimé l'attribut d'action et j'ai obtenu cette erreur lorsque j'appelle un message ajax .. Même si mon attribut d'action dans le formulaire ressemble à ceci action="javascript://;"
Je pensais l'avoir reçu de l'appel ajax et de la sérialisation du formulaire, mais j'ai ajouté l'attribut d'action fictif au formulaire et cela a fonctionné.