2013-11-21 3 views
1

У меня есть веб-приложение. Мой контроллер выглядит следующим образом:Весна неправильная ссылка местоположение

@Controller 
@RequestMapping(value = "/") 
public class MainController {  

    @RequestMapping(method = RequestMethod.GET) 
    public String index() { 
     return "index"; 
    } 

    @RequestMapping(value = "/add", method = RequestMethod.POST) 
    public String add(ModelMap model, User user) { 
     userService.create(user); 
     model.addAttribute("message", "User successfully created."); 
     return "index"; 
    } 
} 

И у меня есть форма, как:

<form:form method="POST" action="/add" commandName="user"> 

web.xml

<servlet> 
    <servlet-name>client</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

<servlet-mapping> 
    <servlet-name>client</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>/WEB-INF/client-servlet.xml</param-value> 
</context-param> 

<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 

Мое приложение доступно через ссылку: http://localhost:8080/Client
Но когда я представить форму, которую она представляет, до http://localhost:8080/add, если она должна быть http://localhost:8080/Client/add
Я понял, что могу использовать ${pageContext.request.contextPath} перед каждой ссылкой, но есть ли другой способ?

+1

Показать нам 'web.xml' – MariuszS

+0

О, я думаю, что я получил свою точку :) – qiGuar

+0

Nice :) Отвечать добавил :) – MariuszS

ответ

2

Попробуйте это:

<form:form method="POST" action="${requestContext.pathToServlet}/add" commandName="user"> 

Подробнее:

Похожие вопросы:

+0

Также работает. Кажется, что весной 3.2.3 (я использую) этот параметр был удален, вместо этого они сделали тэг 'servletRelativeAction', но когда я установил его в true, все еще получая ошибку, но с' $ {requestContext.pathToServlet} 'отлично работает , Я делаю что-то неправильно? – qiGuar

+0

Возможно, 'servletRelativeAction' предназначен только для [портлетов] (https://github.com/spring-projects/spring-framework/commit/399f887128f2dc0dcaadb7b7df2826ce0b9dcf79)? Я думаю, что '$ {requestContext.pathToServlet}' рекомендуется для этого. – MariuszS

+0

Я вижу, но как работает requestContext, если он был откат? Или я чего-то не хватает? – qiGuar

3

Используйте c:url, чтобы автоматически добавить корень контекста к URL-адресу.

<c:url var="formUrl" value="/add" /> 
<form:form method="POST" action="${formUrl}" commandName="user"> 
+0

Да, это работает, но я буду должны сделать это для каждой ссылки, которую у меня есть. Есть ли другой способ? Также добавлен 'web.xml', если это помогает. – qiGuar

+0

Это тоже нормально :) – MariuszS

Смежные вопросы