我搜索了这个问题,因为我得到了一些命名冲突的问题,但我再也找不到原因。我很感激帮助。以下是.jsp中调用控制器的行:
<td>
<a href="message/createMessage">
Reply
</a>
<input type="hidden" name="receiver" value="${message.fromUser}">
</td>
${message.fromUser}
从模型中获取所需的属性。我确信这不是问题的原因,因为此页面中的其他链接可以使用相同的模型。控制器如下:
@Controller
@RequestMapping("/message")
public class MessageController
{
@RequestMapping("createMessage")
public String createMessage(
@RequestParam("receiver") String receiver,
HttpSession session,
Model model)
{
try
{
MessageDAO mDao = new MessageDAO();
Message message = new Message();
String fromUser = (String) session.getAttribute("userName");
message.setFromUser(fromUser);
message.setUserName(receiver);
Message message2 = mDao.create(message);
model.addAttribute(message);
return "newMessage";
}
catch (Exception e)
{
model.addAttribute("message", "Can't create message!");
return "redirect:/"; // ?? should add a dialog box for error
}
}
}
感谢您的帮助!
作为尝试解决问题并基于第一个答案我尝试使用url-rewriting。在我的控制器中使用了@PathVariable(“receiver”)。仍然是同样的问题。我在这里添加了完整修订的jsp:当我点击回复链接获取消息时发生错误。
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<h1>welcome ${sessionScope.user.userName}</h1>
<form:form method="POST" action="message/deleteMessage">
<table border="1">
<tr>
<th>Message ID</th>
<th>From User</th>
<th>Message</th>
<th>Date</th>
<th>Reply to User</th>
<th>Delete</th>
</tr>
<c:forEach items="${messages}" var="message" >
<tr>
<td>${message.messageID}</td>
<td>${message.fromUser}</td>
<td>${message.message}</td>
<td>${message.messageDate}</td>
<td><a href="message/createMessage?receiver=${message.fromUser}">Reply</a></td>
<td><input type="checkbox" name="delete" value="${message.messageID}"> </td>
</tr>
</c:forEach>
<tr><td colspan="6"><input type="submit" value="Delete selected messages"></td></tr>
</table>
</form:form>
答案 0 :(得分:1)
在您的“表单”中,您有一个简单的html超链接,不会提交任何表单(因此永远不会发送隐藏字段的值。
所以你需要声明一个<FORM action= 'message/createMessage' >
元素。
然后您需要使用AJAX提交表单或创建提交按钮。另一种方法是通过附加形式createMessage?receiver=someValue
的值来手动传递接收器值(我添加了这个例子我不认为这是推荐的方式,无论如何一切都有它的优点)。
所以有很多方法可以传递参数。