Ошибка View. Circular view path
коллеги! Я новичок в Spring, и столкнулся с проблемой. Необходимо реализовать функционал поиска по таблице (использую PostgreSQL). Поиск заканчивается ошибкой:
There was an unexpected error (type=Internal Server Error, status=500). Circular view path [search]: would dispatch back to the current handler URL [/search] again. Check your ViewResolver setup! (Hint: This may be the result of an unspecified view, due to default view name generation.)
Посмотрел подобные вопросы, ошибка чаще всего связана с отсутствием каких-либо зависимостей в pom.xml, но вроде бы все зависимости для JSP присутствуют. Подскажите, в чем проблема? Спасибо за вашу помощь!
Код DIV'a для поиска:
<form class="form-inline" method="get" action="search">
<i class="fas fa-search" aria-hidden="true"></i>
<input class="form-control form-control-sm ml-3 w-75" type="text" name="keyword" placeholder="Поиск..." aria-label="Search" />
</form>
Код репозитория:
package book.repos;
import java.util.List;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.query.Param;
import book.domain.Advice;
public interface AdviceRepo extends CrudRepository<Advice, Long> {
List<Advice> findByIdTopic(long idTopic);
@Query(value = "SELECT c FROM Advice c WHERE c.name LIKE '%' || :keyword || '%'"
+ " OR c.argument LIKE '%' || :keyword || '%'"
+ " OR c.law_argument LIKE '%' || :keyword || '%'")
public List<Advice> search(@Param("keyword") String keyword);
}
Код сервиса:
package book.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import book.domain.Advice;
import book.repos.AdviceRepo;
@Service
@Transactional
public class AdviceService {
@Autowired AdviceRepo adviceRepo;
//Поиск
public List<Advice> search(String keyword) {
return adviceRepo.search(keyword);
}
}
Код контроллера :
@Controller
public class AdviceController {
@Autowired
private AdviceRepo adviceRepo;
@Autowired
private AdviceService adviceService;
@GetMapping("/search")
public ModelAndView search(@RequestParam String keyword) {
List<Advice> result = adviceService.search(keyword);
ModelAndView mav = new ModelAndView("search");
mav.addObject("result", result);
return mav;
}
}
Вьюшка:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!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=ISO-8859-1">
<title>Search Result</title>
</head>
<body>
<div align="center">
<h2>Search Result</h2>
<table>
<tr>
<th>Проблема</th>
<th>Решение</th>
<th>Доп. информация</th>
</tr>
<c:forEach items="${result}" var="advice">
<tr>
<td>${advice.name}</td>
<td>${advice.argument}</td>
<td>${advice.law_argument}</td>
</tr>
</c:forEach>
</table>
</div>
</body>
</html>
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>sweater</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.RELEASE</version>
</parent>
<dependencies>
<!-- Spring Boot starter -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Freemarker -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
<!-- DevTools -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
<!-- DataBase support -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- PostgreSQL -->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>runtime</scope>
</dependency>
<!-- security -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- websocket -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
<!-- JSP -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
<properties>
<java.version>1.8</java.version>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
Ответы (1 шт):
Решил проблему следующим образом: В application.properties надо было прописать spring.mvc.view.prefix и spring.mvc.view.suffix для jsp