Spring MVC интеграция Thymeleaf

1

У меня проблема. Я создал проект Spring MVC + Thymeleft, но не могу правильно интегрироваться, я прочитал много руководств и документации, но мне ничего не помогло. Какая проблема? Загрузка страницы и отсутствие ошибок, но не релевантная информация.. Мой код:

spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
   xmlns:tx="http://www.springframework.org/schema/tx" xmlns:mvc="http://www.springframework.org/schema/mvc"
   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
      destroy-method="close">
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="url" value="jdbc:mysql://localhost:3306/practick" />
    <property name="username" value="root" />
    <property name="password" value="" />
</bean>

<!-- Hibernate 3 Annotation SessionFactory Bean definition-->
<bean id="hibernate3AnnotatedSessionFactory"
      class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="annotatedClasses">
        <list>
            <value>SpringMVC1.model.Store</value>
        </list>
    </property>
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
            <prop key="hibernate.current_session_context_class">thread</prop>
            <prop key="hibernate.enable_lazy_load_no_trans">false</prop>
            <prop key="hibernate.show_sql">false</prop>
        </props>
    </property>
</bean>

<mvc:resources mapping="/SpringMVC1/**" location="/WEB-INF/views" />

<!-- class beans -->
<bean id="storeDAO" class="SpringMVC1.dao.Impl.StoreDAOImpl">
    <property name="sessionFactory" ref="hibernate3AnnotatedSessionFactory" />
</bean>

<bean id="storeModel" class="SpringMVC1.model.Store">
</bean>

<!-- Thymeleaf -->
<bean id="templateResolver"
      class="org.thymeleaf.templateresolver.ServletContextTemplateResolver">
    <property name="prefix" value="/views/" />
    <property name="suffix" value=".jsp" />
    <property name="templateMode" value="HTML5" />
</bean>

<bean id="templateEngine"
      class="org.thymeleaf.spring3.SpringTemplateEngine">
    <property name="templateResolver" ref="templateResolver" />
    <property name="additionalDialects">
        <set>
            <bean class = "org.thymeleaf.spring3.dialect.SpringStandardDialect"/>
        </set>
    </property>
</bean>

<bean class="org.thymeleaf.spring3.view.ThymeleafViewResolver">
    <property name="templateEngine" ref="templateEngine" />
    <property name="order" value="1" />
    <property name="viewNames" value="*.html,*.xhtml,*.jsp" />
    <property name="excludedViewNames">
        <array>
            <value>home.jsp</value>
        </array>
    </property>
</bean>

</beans>

В зависимости от вставки pom.xml:

<!-- Thymeleaf -->
    <dependency>
        <groupId>org.thymeleaf</groupId>
        <artifactId>thymeleaf</artifactId>
        <version>2.1.0.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.thymeleaf</groupId>
        <artifactId>thymeleaf-spring3</artifactId>
        <version>2.1.1.RELEASE</version>
    </dependency>

Прототип контроллера

@Controller
public class HomeController {

@Autowired
private ServletContext servletContext;

TemplateEngine templateEngine;

private static Store store;
private static StoreDAOImpl storeDAOImpl;
static List<Store> storess;

static{
    ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
    storeDAOImpl = (StoreDAOImpl)context.getBean("storeDAO");
    store = (Store)context.getBean("storeModel");
}

/*
@RequestMapping(value="/home")
public ModelAndView handleRequest(HttpServletRequest req,
                                  HttpServletResponse resp) throws Exception {

    ModelAndView modelAndView = new ModelAndView("home");
    //modelAndView.addObject("storeList", storeDAO.getAllStores());

    return modelAndView;
}

    @RequestMapping(value = "/storeModel")
    public ModelAndView root(@PathVariable String appBeanId, Locale locale,
                       org.springframework.ui.Model model) {
        appBeanId="storeModel";
        locale.getCountry();
        store.setName("store1");
        model.addAttribute("store1", store);
        return new ModelAndView("home");
    }
*/
private static final Logger logger = LoggerFactory.getLogger(HomeController.class);

@RequestMapping(value = "/home")
public String login(@Validated Store store, Model model) {
    model.addAttribute("storeName", "sometext");
    return "home";
}


/*
//public static List stores = storeDAOImpl.getAllStores();

@RequestMapping(value = "/listStores")
public ModelAndView y(HttpServletRequest req,
                      HttpServletResponse resp) throws SQLException, IOException {
    store.setName("store1");
    WebContext webContext = new WebContext(req, resp, servletContext);
    webContext.setVariable("stores", storeDAOImpl.getAllStores());
    webContext.setVariable("store1", store);
    return new ModelAndView("home");
}
*/
}

И home.jsp:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!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>Home</title>
</head>
<body>
    <h1>Hello World!</h1>
    <p>This is the stores!</p>
 <!--       <c:forEach items="${storeList}" var="store">
        ${store.name} ${store.type}: ${store.address}
        <br />
    </c:forEach>
 -->
<table>
    <caption> Store #2</caption>
    <tr></tr>
        <td><span th:text = "${storeName}">0</span></td>
</table>

</body>
</html>

Изображение 174551Изображение 174551

Теги:
maven
spring-mvc
thymeleaf
controller

2 ответа

0

Я опубликовал рабочее (протестированное с причалом) решение в публичном проекте github.

0

как я знаю, для возвращения jsp-страницы с контроллера u следует использовать smth:

return new ModelAndView("home.jsp")

здесь был вопрос о возврате jsp

если String вернется, как u, она используется для возврата html-страницы с сохраненным в classpath. в контексте тимелеафа он обычно называется шаблоном.

и почему au пытается использовать как тимелеар, так и jsp. Я мог ошибаться, но это две конкурирующие технологии.

На официальном сайте тимелеафа: "Thymeleaf предлагает набор весенних интеграций, которые позволяют использовать его как полноценную замену JSP в приложениях Spring MVC".

  • 0
    контроллер имеет следующий код: @RequestMapping (value = "/ home") public ModelAndView handleRequest (HttpServletRequest req, HttpServletResponse resp) выдает Exception {ModelAndView modelAndView = new ModelAndView ("home"); modelAndView.addObject ("store", "someteext"); вернуть modelAndView; } и в home.jsp я написал: <span th: text = "$ {store}"> 0 </ span> Но это не работает ..
  • 0
    попробуйте new ModelAndView("home"); перейти на new ModelAndView("home.jsp"); и убедитесь, что home.jsp в classpath. а для чего au использует "th" пространство имен в jsp? не JSTL для JSP, или HTML-шаблоны с тимелием вместо файлов JSP.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню