在jsp页面中使用rest服务

时间:2016-03-23 05:15:16

标签: javascript jquery rest jsp spring-mvc

我正在学习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}" />中显示正确的网址,但该表单会显示上一个网址请求中的商品详情。

可能是什么原因?你能指出我在这里做错了吗?

0 个答案:

没有答案