2014-10-08 66 views
1

請幫助我解決一個問題。 我有一個項目JSP + Spring MVC。它顯示了一些數據表。 所以我在clients.jsp頁面上顯示一些數據,我所有的按鈕都有這樣的鏈接:clients/add,clients/edit等等,所以他們用這些url調用servlet。如何在jsp中返回根連接

,我也加入按鈕排序選項clients/sort

當我按下此按鈕,我的網址將成爲http://localhost:8080/Project/clients/sort,我看到排序的數據,但如果我推任何其他按鈕(添加,編輯)我會得到一個錯誤,因爲Dispatcher試圖找到URL爲clients/sort/add的servlet,而不是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

請把添加按鈕,不addOrder按鈕的JSP代碼...你可能沒有使用C:URL添加按鈕。 – 2014-10-08 10:39:33

+0

我添加了添加按鈕,它的形式爲action =「clients/add」 – Cooler 2014-10-08 13:11:10

回答

1

您應該使用c:url否則您的鏈接將與當前網址相關。

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

謝謝,它有幫助!:) – Cooler 2014-10-08 13:49:31

+0

不客氣! – 2014-10-08 13:50:35

-1

首先您的控制器名稱應該不同。它應該只有一個名爲/ add的控制器。在href中你不需要C:taglib。您可以按照以下方式使用它 - href =「add/$ {client.id}」,並且您需要使用@RequestParam(「Id」)long Id捕獲控制器中的客戶端ID。您的控制器無法匹配,因爲您在兩個控制器中具有相同的名稱,您只需指定控制器名稱,而不是像完成的那樣指定完整路徑。

+0

-1,因爲您可以使用2個requestMapping具有相同的值但方法不同。並且使用'href =「add/$ {client.id}'正是海報有pb的原因。如果他在'clients/sort'頁面上,那麼使用你的href將把用戶發送到'clients/sort/add'而不是'clients/add' – 2014-10-08 11:06:39