以下のフォームを送信してコメントを保存したい:
<form:form method="post" action="postNewComment.html" commandName="comment" >
<table>
<tr>
<td><form:label path="comment">
COMMENT
</form:label></td>
<td><form:input path="comment" /></td>
</tr>
<tr>
<td colspan="2"><input type="submit"
value="WRITE" /></td>
</tr>
</table>
</form:form>
最も単純なケースでは、コントローラで addNewComment() メソッドが呼び出され、すべて問題ありません。
@RequestMapping(value = "/postNewComment", method = RequestMethod.POST)
public ModelAndView addNewComment(@ModelAttribute("comment") Comment comment, BindingResult result) {
commentService.addComment(comment);
Map<String, Object> model = new HashMap<String, Object>();
model.put("COMMENTS", commentService.getComments());
return new ModelAndView("showAllComments", model);
}
どのユーザーがコメントを作成したかを記録したくない限り、すべて問題ありません。 ただし、コメントクラスにこのようなユーザーであるフィールドが含まれている場合
@Entity
@Table(name = "comments")
public class Comment {
// more fields...
@ManyToOne
@JoinColumn(name = "user_id")
private User user;
//getters-setters
そして、次のように .jsp ファイルに有効な User オブジェクトがあります。
<c:if test="${!empty LOGGED_IN_USER}">
<spring:message code="label.welcome" /> ${LOGGED_IN_USER.userName}
</c:if>
上記のフォームを送信して、コメントだけでなく LOGGED_IN_USER も送信するにはどうすればよいですか?
以下の「解決策」は機能しません: (org.apache.jasper.JasperException でクラッシュします)
<form:form method="post" action="postNewComment.html" commandName="comment" >
<table>
<tr>
<td><form:label path="comment">
COMMENT
</form:label></td>
<td><form:input path="comment" /></td>
</tr>
<tr>
<td><form:label path="user">
USER
</form:label></td>
<td><form:input path=" ${LOGGED_IN_USER}" /></td>
</tr>
<tr>
<td colspan="2"><input type="submit"
value="WRITE" /></td>
</tr>
</table>
</form:form>