2010-04-13 2 views
0

У меня есть приложение, которое использует Spring 3. У меня есть средство определения вида, которое строит мои представления на основе String. Поэтому в моих контроллерах у меня есть методы, подобные этому.Spring redirect: prefix issue

@RequestMapping(...) 
public String method(){ 
    //Some proccessing 
    return "tiles:tileName" 
} 

мне нужно вернуть RedirectView решить дубликат представления в связи с обновлением страницы в браузере, так что я думал использовать Spring перенаправление префикса. Проблема в том, что он только перенаправляет, когда пользователь меняет URL-адрес префикса (не с именем, которое может понять распознаватель). Я хотел сделать что-то вроде этого:

@RequestMapping(...) 
public String method(){ 
    //Some proccessing 
    return "redirect:tiles:tileName" 
} 

Есть ли способ использовать RedirectView с String (разрешаемые имя зрения) я получаю от каждого метода контроллера?

Благодаря

ответ

3

вызов предваряется редиректа: является URL, который отправляется в стандартном браузере 302 редиректа. вы не можете перенаправить на представление, потому что представление не является URL-адресом. вместо этого вам потребуется новое отображение servelet с целью «успеха», а затем перенаправлять что вместо

@RequestMapping("processing.htm") 
public String method(){ 
    //Some proccessing 
    return "redirect:success.htm" 
} 

@RequestMapping("success.htm") 
public String method(){ 
    return "tiles:tileName" 
} 

этом случае хорошо работает, когда вам просто нужно показать «спасибо» страницу, которая не требует каких-либо конкретных данных от стадии обработки. однако, если ваша страница успеха должна показать некоторую информацию из обработки, есть два способа сделать это.

1) передайте информацию в URL-адресе как сообщение об отправке («redirect: success.htm? Message = hi»). это невероятно взломанно и, следовательно, крайне неоправданно.

2) лучший способ для хранения информации в HTTP-сессии, используя @SessionAttributes и @ModelAttribute