2012-03-04 49 views
0

比方說,我有這樣一個簡單的搜索頁面:的Spring MVC 3和瓷磚:允許控制器改變顯示的URL

<form:form id="productsForm" method="post" modelAttribute="productsFormBean"> 
     <form:label path="name">Name : </form:label> 
     <form:input path="name" /> 
     <button id="filterSubmit" type="submit">Submit</button> 
</form:form> 

用戶可以輸入一個名稱,並提交頁面,但他也可以提交頁面而不輸入任何內容。

是否有可能獲得一個RESTful URL是這樣的:

  • 用戶輸入名稱 「XYZ」,並提交頁面:www.mywebpage.com/products/name/xyz/
  • 的用戶提交頁面沒有名字:www.mywebpage.com/products/

這裏是我的控制器:

@RequestMapping(params = "search=true", value = "/**", method = RequestMethod.POST) 
    public String searchHandler(@Valid final ProductsFormBean productsFormBean, final Model model) { 
     // (...) 
     return "productsSearch"; 
    } 

如果我更改表單的「動作」屬性,則url會更改。我已經通過改變onSubmit事件上的動作來實現這一點。但這不是一個乾淨的解決方案。是否可以直接在控制器中實現?

回答

0
@RequestMapping(value="/", method=RequestMethod.POST) 
public String findProduct(@RequestParam String search) 
{ 
    if(search.isEmpty()) 
    { 
    return "redirect:/" 
    } 
    else 
    { 
    return "redirect:/"+search; 
    } 
} 

這應該讓你開始,你仍舊需要實現處理REST網址爲搜索PARAM的方法。

此外,不知道它是否100%準確,但應該非常接近。

+0

是的! 「重定向:/」的竅門。我不得不實施新的方法來處理網址,但它的工作原理!我的重定向看起來更像這樣:return「redirect:name /」+ search; 。謝謝! – 2012-03-08 01:01:37

+0

沒有問題,Spring API文檔對於這樣的問題非常有用,它幾乎是我工作中的聖經。 – dardo 2012-03-08 02:55:22

0

沒辦法。控制器是純粹的服務器端的東西。它不控制瀏覽器中的任何內容。當請求帶有給定的URL時,它會被調用。但它不會改變瀏覽器處理髮送給控制器的請求的方式。

+0

所以我想我卡在我的JavaScript解決方案?是否可以使用Interceptor或其他解決方案? – 2012-03-05 21:05:43