过程是:一个表中显示的已接收消息列表,每个消息前面都有一个回复链接。按回复转到此控制器:
@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 column not not 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";
}
}
答案 0 :(得分:2)
调试sendMessage例程。您的表单只包含消息的字段,其他字段在技术上不是表单的一部分。要么将消息对象存储到会话中,以便java bean能够存活两个请求,或者您可以将userName,fromName等重复为隐藏字段,这样它们就会映射到为sendMessage创建的新请求bean。