0

以下のフォームを送信してコメントを保存したい:

<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>
4

1 に答える 1

0

ログインしたユーザーはセッションに正しく参加する必要があると想定しています-そうであれば、コントローラー内のコメントにユーザーを設定するだけです-

comment.setUser(sessionUser)

または、コメント オブジェクトを表示するときに sessionUser を設定することもできます。

<form:hidden path="user"/>
于 2012-08-20T11:24:22.650 に答える