2015-08-12 2 views
0

Я сделал контроллер, который должен обрабатывать информацию о форме и отправлять ее в базу данных (пока это только печать), но когда я нажимаю кнопку «отправить», URL-адрес, который поступает в браузер, неверен, поскольку он подразумевает, что контроллер находится в моей папке jsp где, очевидно, нет. Как это исправить?Spring - Как правильно сопоставить контроллер?

import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.ModelAttribute; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.method.support.ModelAndViewContainer; 

import wymysl.database.Person; 
import wymysl.database.PersonsRepository; 


@RequestMapping("/register") 
public class RegisterController { 

PersonsRepository repo; 

@RequestMapping(value = "/addPerson", method = RequestMethod.POST) 
public String register(@ModelAttribute("Person") Person person, HttpServletRequest request) { 

    System.out.println(""+person.getName()); 

    return "index"; 

} 

Это заголовок формы

<form class="form-register" method="POST" action="/register/addPerson" commandName="Person"> 

web.xml

<web-app id="WebApp_ID" version="2.4" 
    xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> 

    <display-name>MyApp</display-name> 

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

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

</web-app> 
+0

Для начала измените ваше сопоставление запроса на/register, а не только на регистрацию. Зачем вам нужен HttpServletRequest? и измените действие на addPerson или что бы вы ни делали. –

+0

Для получения атрибутов из формы. Изменен бит-код сейчас, но он все еще не работает. Посмотрите –

+0

Нет, просто измените отображение запроса поверх метода register внутри класса, сохраните аннотацию Controller как и для класса. –

ответ

1

Изменить действие POST в вашей форме "действие =/регистром" (удалить .html) Это может сработать или добавить то же самое к запросу.

0

Единственный отображаемый URL-адрес здесь: /register/addPerson, измените параметр действия на это.

+0

Изменено в моем коде и в сообщении, но все еще без эффекта –

0

Есть несколько вещей, которые могли бы быть неправильно:

  1. Вы уверены, ваш контроллер был зарегистрирован весной? (Проверьте журнал для RegisterController)
  2. Вы должны использовать с: URL тег: <c:url value="/register/addPerson"/>
  3. Поскольку вы смонтировали DispatcherServlet на / вам нужно будет включать в себя MVC: тег ресурсов для того, чтобы найти другие ресурсы:
<!-- Handles GET requests for /resources/** by efficiently serving static content in the ${webappRoot}/resources dir --> 
<mvc:resources mapping="/resources/**" location="/resources/" /> 
Смежные вопросы