2014-12-22 2 views
1
<form:form action="register/student.htm" method="post" modelAttribute="registerForm"> 
..... 
</form:form> 

Когда я сначала представить эту форму URL-адрес являетсяСбросить весенний url. URL добавляемый после отправки формы дважды

"loclhost: 8080/SpringSchool /register/ student.htm"

Если представить не может, и я снова submt его, новый URL добавляемый и становится:

"loclhost: 8080/SpringSchool /register/register/ student.htm"

в результате я получаю сообщение об ошибке 404. Как я могу сбросить URL-адрес, чтобы URL-адрес не был добавлен или просто в основном выполнял эту работу?

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

@RequestMapping(method=RequestMethod.GET) 
    public ModelAndView registerPage(){ 

     return new ModelAndView("registerStudent", "registerForm", new Student()); 
    } 


    @RequestMapping(value="/student", method = RequestMethod.POST) 
    public ModelAndView registerStudent(@ModelAttribute("registerForm") final Student student, RedirectAttributes redirectAttr){ 
      .... 
      return new ModelAndView("registerStudent", "registerForm", student);    

    } 

вид распознаватель

<bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver"> 
     <property name="viewClass" 
      value="org.springframework.web.servlet.view.JstlView" /> 
     <property name="prefix" value="/WEB-INF/jsp/" /> 
     <property name="suffix" value=".jsp" /> 
</bean> 
+0

почему начальная форма подать провал? –

+0

, когда он не может подтвердить вас [должен просто отправить запрос назад] (http://spring.io/guides/gs/validating-form-input/) –

+0

@EngineerDollery, если пользователь уже существует, он не работает, а также некоторые другие бизнес-логики – Susie

ответ

1

Если начать URL с «/», то это указывает на корень из контекста, но если вы начинаете URL из слова - это означает, что «из текущего пути ». Ваша проблема должна быть решена, если добавить «/» в URL:

<form:form action="/${pageContext.request.contextPath}/register/student.htm" method="post" modelAttribute="registerForm"> 
..... 
</form:form> 
+0

Я пробовал это, и он не работает. он сбрасывает url на localhost: 8080/register/student.htm.Он избавляется от «SpringSchool» от url после отправки – Susie

+0

. Вы можете легко добавить его:

+0

Это сработало, но Мне пришлось удалить «/» перед $ {pageContext ....}. Если я держу «/» там, url становится 'http: // springschool/register/student.htm'. Он избавляется от «localhost: 8080. Спасибо – Susie

1

Это потому, что форма действия используется относительный путь. Чтобы устранить проблему, вы должны организовать свой jsp в папке, и ваш контроллер должен возвращать представления с соответствующими путями.

Перемещайте JSP в:

/WEB-INF/jsp/register/registerStudent.jsp 

Ваш контроллер должен вернуть имя вида:

register/registerStudent 

В вашей форме, изменение действия по:

<form:form action="student.htm" method="post" modelAttribute="registerForm"> 
..... 
</form:form> 
+0

Я не буду работать, потому что в первую очередь будет использоваться следующий URL: loclhost: 8080/SpringSchool/student.htm, который недействителен URL –

+0

Действие формы относительно путь, а не контекст. В моем посте путь был бы localhost: 8080/SpringSchool/register – happymeal

+0

О, я вижу. Я пропустил эту часть. Это тоже сработает. –