如何在jsp中返回root链接

时间:2014-10-08 10:22:59

标签: java jsp servlets

你能解决一个问题吗? 我有一个项目JSP + Spring MVC。它显示包含一些数据的表。 所以我在clients.jsp页面上显示了一些数据,我的所有按钮都有这样的链接:clients/addclients/edit等等,所以他们用这些网址调用servlet。

我还添加了按钮clients/sort

的排序选项

当我按下此按钮时,我的网址变为http://localhost:8080/Project/clients/sort,我看到排序数据,但如果我按任何其他按钮(添加,编辑),我将收到错误,因为Dispatcher正在尝试使用网址查找servlet clients/sort/add,而非clients/add

所以我不知道如何处理这个问题,如何编写按钮链接,这些链接不依赖于页面网址?

我项目中的一些代码:

按钮:

            <div align="center">
                <a class="sort_firstName"
                   href="<c:url value="/clients/sort/firstnameup"/>">
                    <spring:message code="label.up"/>
                </a>
            </div> 

            <!-- ADD ORDER BUTTON -->
            <a class="add_order"
               href="<c:url value="/clients/addOrder/${client.id}"/>">
                <spring:message code="label.addOrder"/>
            </a> /

            <!-- EDIT CLIENT BUTTON -->
            <a href="<c:url value="/clients/edit/${client.id}"/>">
                <spring:message code="label.modify"/></a>

控制器:

@RequestMapping(value = "/add", method = RequestMethod.GET)
public String newClient(Model model) {
    Clients client = new Clients();
    client.setId(0);
    model.addAttribute("clientAdd", client);
    return "clientForm";
}

@RequestMapping(value = "/add", method = RequestMethod.POST)
public String addClient(@ModelAttribute("clientAdd") Clients client,
                        BindingResult result, Model model) {
    if (result.hasErrors()) {
        return "clientForm";
    }
    clientsService.createClient(new CreateClientEvent(client));
    return "redirect:/clients";
}

UPD:

<form id="dialog-form" class="form-horizontal" action="clients/add" method="post">
    <table class="table table-condensed table-striped">
        ....
    </table>
    <div class="col-sm-offset-2 col-sm-10">
        <a class="pull-right">
            <button class="btn btn-primary" type="submit" id="addClient" ><c:out value="Create"/></button>
        </a>
    </div>
</form>

2 个答案:

答案 0 :(得分:1)

您应该使用c:url,否则您的链接将与当前网址相关。

<c:url value="/clients/add" var="addUrl"/> 
<form id="dialog-form" class="form-horizontal" action="${addUrl}" method="post">

答案 1 :(得分:-1)

首先,您的控制器名称应该不同。它应该只有一个名为/ add的控制器。在href你不需要C:taglib。你可以用以下方式使用它 - href =&#34; add / $ {client.id}&#34;并且您需要使用@RequestParam(&#34; Id&#34;)long Id来捕获控制器中的客户端ID。您的控制器无法匹配,因为您在两个控制器中具有相同的名称,并且您只需指定控制器名称而不是像您所做的那样指定完整路径。