2012-03-04 3 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 вроде этого:

  • пользователь вводит имя «АБВ» и представляет страницу: 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-адрес изменяется. Я уже достиг этого с помощью javascript, изменив действие на событие onSubmit. Но это не чистое решение. Можно ли достичь этого непосредственно в контроллере?

ответ

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

Это должно вам начать работу, вам все равно необходимо реализовать метод для обработки URL-адреса REST для поиска паров.

Кроме того, не знаю, является ли это на 100% точным, но должно быть довольно близко.

+0

Да! «Переадресация: /» делает трюк. Мне пришлось внедрять новые методы обработки URL-адреса, но он работает! И мое перенаправление выглядит примерно так: return "redirect: name /" + search; , Благодаря! –

+0

Не проблема, документация Spring API отлично подходит для таких вопросов, это почти моя библия на работе. – dardo

0

Ни в коем случае. Контроллер является чистым серверным материалом. Он ничего не контролирует в браузере. Он вызывается, когда запрос поступает с заданным URL-адресом. Но это ничего не меняет в том, как браузер обрабатывает запросы, отправленные на контроллер.

+0

Итак, я думаю, что я застрял на своем решении javascript? Можно ли использовать Interceptor или любое другое решение? –