Spring MVC 3 и тайлы: позволяют контроллеру изменять отображаемый URL - PullRequest
0 голосов
/ 04 марта 2012

Допустим, у меня есть простая страница поиска, подобная этой:

<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>

Пользователь может ввести имя и отправить страницу, но он также может отправить страницу, не вводя ничего.

Можно ли получить URL-адрес RESTful следующим образом:

  • пользователь вводит имя "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";
    }

Если я изменю атрибут "action"форма, URL меняется.Я уже добился этого с помощью javascript, изменив действие на событие onSubmit.Но это не чистое решение.Можно ли добиться этого прямо в контроллере?

Ответы [ 2 ]

0 голосов
/ 07 марта 2012
@RequestMapping(value="/", method=RequestMethod.POST)
public String findProduct(@RequestParam String search)
{
  if(search.isEmpty())
  {
    return "redirect:/"
  }
  else
  {
    return "redirect:/"+search;
  }
}

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

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

0 голосов
/ 04 марта 2012

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

...