2016-03-24 4 views
0

Я начал изучать Spring framework, и у меня проблемы с перенаправлением на страницы. Я использую чистый html, потому что я хочу, чтобы мой front-end был более независимым (в отличие от jsp). Я использую XML-конфигурации, который выглядит следующим образом:Spring html view response

<mvc:annotation-driven/> 
<context:component-scan base-package="controllers"/> 

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    <property name="prefix" value=""/> 
    <property name="suffix" value=".html"/> 
</bean> 

<mvc:resources location="/resources/" mapping="/resources/**"></mvc:resources> 

Некоторые основные контроллеры отлично работает, я могу перейти на страницу, если я использую метод GET (и тип браузера СТГ, как это: http://localhost:8080/mywebapp/home):

@Controller 
@RequestMapping({"/", "/home"}) 
public class HomeController { 

    @RequestMapping(method=RequestMethod.GET) 
    public String goHome() { 
     System.out.println("HOME CONTROLLER"); 
     return "resources/static/home"; // <-- name of the view (.html) 
     //return "home"; 
    } 
} 

Однако, если я хочу перенаправить пользователя после того, как он использует регистрационную форму и метод отправки, я получаю пустую страницу с текстом: «resources/static/home».

контроллер выглядит следующим образом:

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

    private static final Logger logger = Logger.getLogger(RegisterController.class); 

    @RequestMapping(method = RequestMethod.GET) 
    public String goRegister() { // this method works fine 
     return "resources/static/register"; 
    } 

    @RequestMapping(method = RequestMethod.POST) 
    @ResponseBody 
    public String doRegister(User user) { // this does not send user back to home page 
     logger.info("register new user request"); 
     System.out.println(user.toString()); 

     // TODO validation of user 

     return "resources/static/home"; 
    } 
} 

класс пользователя правильно установлены значения из формы, но вместо того, чтобы перенаправлять обратно на главную страницу, я получаю пустой HTML с текстом. Я пытался использовать:

return "redirect:resources/static/home"; 

, но он также не работал.

Регистрация файла:

<!DOCTYPE html> 
<html> 
<head> 
<meta charset="UTF-8"> 
<title>Insert title here</title> 
</head> 
<body> 

    <h1>Register your account here.</h1> 

    <form method="POST"> 
    Name: <input type="text" name="firstName" /><br> 
    Surname: <input type="text" name="surname" /><br> 
    e-mail: <input type="email" name="email" /><br> 
    Password: <input type="password" name="password" /><br> 
    Retype password: <input type="password" name="repassword" /><br> 
    <br> 
    <input type="submit" value="Submit"> 
    </form> 

</body> 
</html> 

Я не могу понять логику этого. Почему метод GET способен возвращать представление, а POST - нет.

Edit: Я забыл упомянуть, что ранее, когда я использовал .jsp страниц, почти тот же код работал хорошо, и я, конечно, были разные XML-конфигурации и контроллеры только возвращаемые имя вида, например:
return "home";

Edit2: Это источник: https://github.com/robson021/InvoiceWriterFinal

ответ

0

Удалить @ResponseBody из метода doRegister. Эта аннотация отправляет вашу строку в ответ на HTTP-вызов.

Если у вас нет аннотации, то распознанные разрешения, которые вы зарегистрировали, обрабатывают строку и отображают соответствующий html.

+0

После того, как я это сделал, я получил: «HTTP Status 405 - метод запроса« POST »не поддерживается» – Robson021

+0

Должно работать, как вы сказали, работает, просто не создавая правильную страницу. Попробуйте '@RequestBody User user' –

+0

Все еще не работает. – Robson021