No mapping found for HTTP request with URI [/app/poFormularzu] in DispatcherServlet with name 'appSe

0

Wypełniam formularz, wysyłam, ale strona po prawidłowym wypełnieniu formularza nie chce się wyświetlić.
Dostaję:
No mapping found for HTTP request with URI [/app/poFormularzu] in DispatcherServlet with name 'appServlet'

package com.my.app;

import javax.validation.Valid;

import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;

import com.my.app.model.FormularzDTO;

@Controller
public class SampleController {

    @RequestMapping("/formularz")
    public String formularz(@ModelAttribute("form") @Valid FormularzDTO form, BindingResult result) {
        if (result.hasErrors()) {
            //formularz nie jest uzupełniony prawidłowo
            return "formularz";
        } else {
            //formularz wypełniony prawidłowo
        	return "redirect:/poFormularzu";
        }
    }
}

 
 
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>

<form:form action="formularz" modelAttribute="form" method="post">

 Imię: 
 <form:input path="imie" id="imie"></form:input>
 <form:errors path="imie" cssclass="error"></form:errors>
 <br />

 Adres email: 
 <form:input path="email" id="email"></form:input>
 <form:errors path="email" cssclass="error"></form:errors>
 <br />

 Wiek:
 <form:input path="wiek" id="wiek"></form:input>
 <form:errors path="wiek" cssclass="error"></form:errors>
 <br />

 <input type="submit" value="Wyślij formularz" />
</form:form>
</body>
</html>

Wszystkie pliki widoku są  w folderze views.
0

No a gdzie masz kontroler który niby łyka to "po formularzu"? Bo ja takiego u ciebie nie widzę...

0
 
    @RequestMapping("/poFormularzu")
    public String formularz(){
    	return "redirect:/poFormularzu";
    }
 
Unable to load page

Problem occurred while loading the URL http://localhost:8080/app/poFormularzu

Too many redirects
0

No a teraz to co niby chciałeś osiągnąć? o_O Bo teraz każesz przekierować request z /poFormularzu do /poFormularzu co spowoduje przekierowanie do /poFormularzu a to następnie, gdzie nas przekieruje? Wiem że trudno sie domyślić, ale do /poFormularzu które następnie....

0
package com.my.app;

import javax.validation.Valid;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.my.app.model.FormularzDTO;

@Controller
public class SampleController {

	
	@RequestMapping(value = "formularz", method = RequestMethod.GET)   
	public String getRegistrationForm(Model model) {
	   		model.addAttribute("form", new FormularzDTO());     
	   		return "formularz";   
	}
    
    @RequestMapping(value = "", method = RequestMethod.POST)   
    public String postRegistrationForm(FormularzDTO formularzDTO) {     
    		return "redirect:poFormularzu";   
    }

    /*public String formularz(@ModelAttribute("form") @Valid FormularzDTO form, BindingResult result) {
        if (result.hasErrors()) {
            //formularz nie jest uzupełniony prawidłowo
            return "formularz";
        } else {
            //formularz wypełniony prawidłowo
        	return "redirect:/poFormularzu";
        }
    }
    @RequestMapping("/poFormularzu")
    public String formularz(){
    	return "redirect:/poFormularzu";
    }*/
}
 

WARN : org.springframework.web.servlet.PageNotFound - Request method 'POST' not supported

Jak to jest z tymi przekierowaniami? Czytałem, że niby powinienem zwrócić adres url.

0

A możesz napisać co chcesz osiągnąć? Bo to co robisz to jakiś WTF a jestem pewien że chcesz zrobić coś prostego tylko za bardzo kombinujesz..

0
<form:form action="formularz" modelAttribute="form" method="post"> 

Wysyłasz dane postem do podstrony formularz, więc musi być funkcja która to obsłuży:

 
    @RequestMapping(value = "/formularz", method = RequestMethod.GET)   
    public String getRegistrationForm(Model model) {
               model.addAttribute("form", new FormularzDTO());     
               return "formularz";   
    }
 
    @RequestMapping(value = "/formularz", method = RequestMethod.POST)   // ZMIENIONE 
    public String postRegistrationForm(FormularzDTO formularzDTO) {     
            return "redirect:poFormularzu";   //Jeżeli to ma być tylko przekierowanie to nie lepiej zrobić w widoku przekierowanie na strone poFormularzu ?
    }
0

Po prawidłowym wypelnieniu formularza chce przekierować do strony z podziękowaniem i tyle.

0

Ech. W skrócie: KAŻDE żądanie jest obsługowane przez kontroler. redirect służy do przekierowania pomiędzy kontrolerami. Jeśli podajesz coś w przekierowaniu to musisz mieć kontroler który to przekierowanie łyknie. Kontroler albo przekierowuje do innego, albo zwraca widok (albo jsona jakiegoś jeśli to restcontroller oczywiście). Czemu po prostu nie zwrócisz widoku z podziękowaniem? Boli cię że w pasku adresu będzie /formularz? To zrób przekierowanie, ale wtedy musisz dodać jeszcze jeden kontroler który to przekierowanie łyknie i zwróci widok z podziękowaniami.

0

Dzięki @Shalom działa.

GET-POST-REDIRECT

Nazw odnosi się do ‘zachowań’ które real­izu­jemy przy uży­ciu pro­tokołu HTTP. Pier­wszy krok to zapy­tanie typu GET, które powoduje wyświ­etle­nie się strony z for­mu­la­rzem. Drugi krok to przesłanie for­mu­la­rza za pomocą metody POST. Po przesła­niu for­mu­la­rza jest on wali­d­owany i w zależności od wyniku wal­i­dacji albo wyświ­et­lamy for­mu­larz ponownie (w przy­padku błędów) albo wysyłamy do przeglą­darki infor­ma­cję **o przekierowa­niu **(wtedy strona, na którą kieru­jemy, zostanie wyświ­et­lona już z uży­ciem metody GET). Takie pode­jś­cie ma kilka zalet, przede wszys­tkim stan­dar­d­owe pode­jś­cie z uży­ciem pod­sta­wowych mech­a­nizmów, co ułatwia imple­men­tację na poziomie kodu, ale także zabez­piecza przed przy­pad­kowym ponownym wysłaniem for­mu­la­rza (mogłoby się tak zdarzyć, gdyby użytkownik np. kliknął przy­cisk wstecz w przeglą­darce a nasz ostatni krok nie wykony­wałby przekierowa­nia). W Spring MVC przekierowanie obsługu­jemy zwraca­jąc z metody zami­ast nazwy widoku adres URL poprzed­zony frazą “redi­rect:”. Zobaczmy przykład­owy kon­troler zre­al­i­zowany w ten sposób (o adno­tacji @Valid i klasie Bind­in­gRe­sult powiemy sobie za moment).

Pytanie czy teraz mój kod jest zabezpieczony przed przypadkowym ponownym przesłaniem formularza?

package com.my.app;

import javax.validation.Valid;

import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;

import com.my.app.model.FormularzDTO;

@Controller
public class SampleController {

	//It's works!
	/*@RequestMapping(value = "formularz", method = RequestMethod.GET)   
	public String getRegistrationForm(Model model) {
	   		model.addAttribute("form", new FormularzDTO());     
	   		return "formularz";   
	}
    
    @RequestMapping(value = "formularz", method = RequestMethod.POST)   
    public String postRegistrationForm(FormularzDTO formularzDTO) {     
    		return "poFormularzu";   
    }*/

	
	//It's works!
	@RequestMapping("/formularz")
    public String formularz(@ModelAttribute("form") @Valid FormularzDTO form, BindingResult result) {
        if (result.hasErrors()) {
            //formularz nie jest uzupełniony prawidłowo
            return "formularz";
        } else {
            //formularz wypełniony prawidłowo
        	return "redirect:/poFormularzu";
        }
    }
	
	@RequestMapping("/poFormularzu")
	public String postForm(){
		return "poFormularzu";
	}
}

 

1 użytkowników online, w tym zalogowanych: 0, gości: 1