我正在学习spring mvc rest编程并且遇到了以下问题。
我在JSP中有一个项目页面,用于添加新项目以及编辑项目。 我在这里做的是(不确定这是否是正确的方法),我有一个控制器方法
@RequestMapping(value = "/item/{id}", method = RequestMethod.GET)
public String addEditItem(Model model, Principal principal, @PathVariable("id") String id) {
model.addAttribute("id", id);
model.addAttribute("item", new Item());
if (Integer.parseInt(id) != 0) {
model.addAttribute("edit", true);
} else {
model.addAttribute("edit", false);
}
System.out.println(model.toString());
return "item";
}
确定它是否是添加/编辑调用,并相应地设置布尔值edit
的值。
下面是我的item.jsp
页面。
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="sf" uri="http://www.springframework.org/tags/form"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<script type="text/javascript">
var itemurl = "";
function onDelete(event) {
var doDelete = confirm("Are you sure you want to delete this offer?");
if (doDelete == false) {
event.preventDefault();
}
}
function onReady() {
$("#delete").click(onDelete);
}
$(document).ready(onReady);
function updateItemDetails(item) {
$("#itemName").val(item.itemName);
$("#taxPercentage").val(item.taxPercentage);
$("#price").val(item.price);
$("#count").val(item.count);
}
function updatePage(itemurl) {
$.getJSON("<c:url value='${itemurl}'/>", updateItemDetails);
}
</script>
<c:if test="${edit}">
<c:set var="itemurl" value="/getitem/${id}"></c:set>
<c:out value="${itemurl}" />
<script type="text/javascript">
updatePage(itemurl);
</script>
</c:if>
<sf:form method="put"
action="${pageContext.request.contextPath}/saveitem" commandName="item">
<sf:input type="hidden" name="itemId" path="itemId" />
<table class="formtable">
<tr>
<td class="label">Item Name :</td>
<td><sf:input class="control" path="itemName" name="itemName"
id="itemName" type="text" />
<div class="error">
<sf:errors path="itemName"></sf:errors>
</div></td>
</tr>
<tr>
<td class="label">Tax Percentage :</td>
<td><sf:input class="control" path="taxPercentage"
name="taxPercentage" id="taxPercentage" type="text" />
<div class="error">
<sf:errors path="taxPercentage"></sf:errors>
</div></td>
</tr>
<tr>
<td class="label">Price :</td>
<td><sf:input class="control" path="price" name="price"
id="price" type="text" />
<div class="error">
<sf:errors path="price"></sf:errors>
</div></td>
</tr>
<tr>
<td class="label">Count :</td>
<td><sf:input class="control" path="count" name="count"
id="count" type="text" />
<div class="error">
<sf:errors path="count"></sf:errors>
</div></td>
</tr>
<tr align="center">
<td colspan="2"><input class="control" value="Save offer"
type="submit" /> <c:if test="${item.itemId != 0}">
<input name="delete" class="control" value="Remove offer"
type="submit" id="delete" />
</c:if></td>
</tr>
</table>
</sf:form>
在表单上方,我添加了<c:out>
以查看正在形成的网址。
正在使用的其余方法是,
@RequestMapping(value = "/getitem/{id}", method = RequestMethod.GET, produces="application/json")
@ResponseBody
public Item getItem(@PathVariable("id") String id) {
Item item = itemsService.getItem(Integer.parseInt(id));
return item;
}
问题在于,如果我使用特定ID创建了网址请求,则会在<c:out value="${itemurl}" />
中显示正确的网址,但该表单会显示上一个网址请求中的商品详情。
可能是什么原因?你能指出我在这里做错了吗?