viperz
@viperz
inspired by Java

Что происходит не так с адресацией Views в Spring MVC?

Добрый день.

Я конечно не могу претендовать по какой-либо глубины понимание адресации Views in Spring MVC.

Но когда я ничего не понял - я пошел в гугл, достал пример проекта от Spring , там всё работает. Поигрался с разными вариантами, которые подходят для моего случая - всё работает. Включаю у себя - то одно не так, то другое не так. Похоже на бесполезную трату времени, т.к. в данном случае я просто не понимаю, что происходит под капотом и почему.
В итоге потрачен 3 часа времени - и ничего не понятно :(

В целом вот спринг контроллер и спринг бут в одном классе :

package com.contacts;

import com.contacts.db.HibernateUtil;
import com.contacts.model.Contact;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.boot.*;
import org.springframework.boot.autoconfigure.*;
import org.springframework.stereotype.*;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

@Controller
@EnableAutoConfiguration
public class WebController {
    @RequestMapping(value = "/contacts/edit", method=RequestMethod.GET)
    public String editContact(@RequestParam(name = "id", required = false) Integer id, Model model) {
        if (id == null)
            id = 0;

        Session session = HibernateUtil.getSessionFactory().openSession();
        Query query = session.createQuery("from Contact where id = :contact_id");
        query.setParameter("contact_id", id);
        Contact contact = (Contact)query.uniqueResult();
        if (contact == null)
            contact = new Contact();
        HibernateUtil.shutdown();

        model.addAttribute("contact", contact);
        return "edit";
    }

    @RequestMapping(value = "/contacts/edit", method=RequestMethod.POST)
    public String editContact(@RequestParam(name = "id", required = false) Integer id, @ModelAttribute Contact contact, Model model) {
        model.addAttribute("contact", contact);
        return "result";
    }

    public static void main(String[] args) throws Exception {
        SpringApplication.run(WebController.class, args);
    }
}


Когда я что-либо меняю в этом коде - я постоянно получаю то 404 (страница не найдена), то
Circular view path [edit]: would dispatch back to the current handler URL [/contacts/edit] again. Check your ViewResolver setup! (Hint: This may be the result of an unspecified view, due to default view name generation.)


Структура проекта:
9f685c0763b74bdea18301afa968afd2.JPG

Контент файлов HTML:
edit.html
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Getting Started: Handling Form Submission</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<h1>Form</h1>

<form action="#" th:action="@{/contacts/edit}" th:object="${contact}" method="post">
    <p>First name: <input type="text" th:value="${contact.firstName}" th:field="*{firstName}" /></p>
    <p><input type="submit" value="Submit" /> <input type="reset" value="Reset" /></p>
</form>
</body>
</html>


result.html

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Getting Started: Handling Form Submission</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<h1>Result</h1>
<p th:text="'First name: ' + ${contact.firstName}" />
</body>
</html>
  • Вопрос задан
  • 5187 просмотров
Решения вопроса 1
@mvsavkin
У вас не настроен бин view resolver. Необходимо создать бин и указать ему префикс(путь до файла) и суффикс(окончание файла).
Обычно выглядит так:
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
              <property name="prefix" value="/WEB-INF/views/" />
              <property name="suffix" value=".jsp" />
</bean>
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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