まず、この繰り返し質問をすることをおaび申し上げます。
実際に私の春のアプリケーションでは、私はuser.jsp
とprofessional.jsp
を持っています
ここに私のUser.jspがあります:
<form:form action="profile/user" modelAttribute="profile">
<div>
<jsp:include page="professional.jsp"></jsp:include>
</div>
</form:form>
そして、ここに私の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>
そして、ここに私のControllerクラスがあります:
@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
はprofessional.jsp
のAdd
ボタンをクリックしたときです。サーバーコンソールには応答はありませんが、以下の警告メッセージが表示されます。
29 Mar, 2013 1:03:51 PM org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver handleHttpRequestMethodNotSupported
WARNING: Request method 'POST' not supported
なぜこの警告が来るのですか? method = "POST"は既に指定されています。
助けてください..
あなたのuser.jsp:
<form:form action="profile/proffesional" modelAttribute="PROFESSIONAL">
---
---
</form:form>
コントローラークラスで:
(意味のある完全なメソッド名として作成してください。DBにレコードを挿入していると思います。)
@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";
}
スプリントセキュリティxmlファイルでcsrfを有効にしていたので、フォームに1行追加しただけです。
<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}" />
このようにして、model
属性を持つフォームを送信できました。
Jspの場合:
action="profile/proffiesional"
コントローラー内
@RequestMapping(value = "proffessional", method = RequestMethod.POST)
スペルミスミスマッチ!
forgotPassword
メソッドに@ModelAttribute
パラメーターのUserProfessionalForm professionalForm
アノテーションがありません。
@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";
}
これを試して
@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";
}
情報については、アクション属性を削除し、ajaxポストを呼び出したときにこのエラーが発生しました。フォームのアクション属性はこのように見えますが、action="javascript://;"
私はajax呼び出しとフォームのシリアル化からそれを持っていると思っていましたが、ダミーアクション属性をフォームに再び追加し、それが機能しました。