clients/add
,clients/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>
答案 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。您的控制器无法匹配,因为您在两个控制器中具有相同的名称,并且您只需指定控制器名称而不是像您所做的那样指定完整路径。