2

プロセスは次のとおりです。テーブルに表示される受信メッセージのリストと、各メッセージの前に返信リンクがあります。返信を押すと、次のコントローラーに送信されます。

    @RequestMapping("/createMessage")
public String createMessage(@RequestParam("receiver") String receiver, HttpSession session, Model model){
  try{  

    Message message = new Message();
    //sender, Date, and receiver are known and are added to the object      

    model.addAttribute(message);

    return "newMessage";

  } catch (Exception e){
        model.addAttribute("message", "Can't create message!");
        return "error"; 
  }

newMessage.jsp は次のとおりです。from:、To:、および Date: フィールドが適切に入力されているため、モデルを受け取ります。

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"   "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Send Message</title>
</head>
<body>
<form:form modelAttribute="message" method="POST" action="sendMessage">
<table border="1">
<tr>
  <th>To: </th><td>${message.userName}</td>
</tr>
<tr>
  <th>from: </th><td>${message.fromUser}</td>
</tr>
    <tr>
  <th>Date: </th><td>${message.messageDate}</td>
</tr>
<tr>
  <th>Message</th>
  <td>
    <form:textarea path="message"/>
  </td>            

</table>
<input type="submit" value="send Message">
</form:form>  

</body>
</html>

送信ボタンが押されると、次のコントローラーが (Hibernate を使用して) データベースにオブジェクトを作成しますが、「fromUser 列を null にすることはできません」というエラーが発生します。データベースへの接続は機能していますが、オブジェクトがこのコントローラーに渡されていないことを示しています。なぜ?

@RequestMapping("/sendMessage")
public String sendMessage(HttpSession session,@ModelAttribute("message") Message message, Model model){

    try{
    MessageDAO mDao = new MessageDAO();
    Message message2 = mDao.create(message);

    model.addAttribute("message", "Message was sent");
    return "success";

    } catch(Exception e){
        model.addAttribute("message", "Can't create message!");
        return "error";
    }


}
4

1 に答える 1

2

sendMessage ルーチンをデバッグします。フォームにはメッセージのフィールドのみが含まれており、他のフィールドは技術的にフォームの一部ではありません。Java Bean が 2 つの要求に耐えられるようにメッセージ オブジェクトをセッションに保存するか、userName、fromName などを非表示フィールドとして繰り返して、sendMessage 用に作成された新しい要求 Bean にマップされるようにすることができます。

于 2012-12-09T13:25:15.790 に答える