2016-03-20 4 views
1

Я работаю над приложением Spring Boot MVC. Моя проблема в том, что когда появляется представление, оно не анализирует значения из Модели.Spring Boot MVC не использует значения модели в JSP

application.properties

spring.application.name=test-mvc 
server.context-path=/test-mvc 

Config

@Configuration 
@EnableWebMvc 
public class ApplicationConfigurerAdapter extends WebMvcConfigurerAdapter{ 

    @Override 
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { 
     configurer.enable(); 
    } 

    @Bean 
    public InternalResourceViewResolver viewResolver() { 
     InternalResourceViewResolver resolver = new InternalResourceViewResolver(); 
     resolver.setPrefix("/WEB-INF/pages/"); 
     resolver.setSuffix(".jsp"); 

     return resolver; 
    } 
} 

Применение

@SpringBootApplication 
public class Application extends SpringBootServletInitializer { 
    @Override 
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { 
     return application.sources(Application.class); 
    } 

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

Контроллер

@Controller 
@RequestMapping("/view") 
public class TestController { 

    @RequestMapping("/greeting") 
    public String greeting(@RequestParam(value="name", required=false, defaultValue="World") String name, ModelMap model) { 
     model.addAttribute("name", name); 

     return "greeting"; 
    } 
} 

greeting.jsp

<html> 
<head><title>Hello world Example</title></head> 
<body> 
    <h1>Hello ${name}, How are you?</h1> 
</body> 
</html> 

Выход из http://localhost:8080/test-mvc/view/greeting?name=Mikey:

Здравствуйте, $ {имя}, как вы?

Я также попытался вернуть ModelAndView. Я не уверен, почему он не ставит «Мики» там, где находится ${name}.

Update

Каждый раз, когда я добавить TagLib или что-нибудь на странице JSP, отображается исходный код страницы. Он не отображает страницу. Ниже мой pom.xml

<parent> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-parent</artifactId> 
    <version>1.3.3.RELEASE</version> 
</parent> 

<properties> 
    <hibernate.version>5.0.5.Final</hibernate.version> 
    <postgres.version>9.4.1208</postgres.version> 
</properties> 

<dependencies> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-web</artifactId> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-data-jpa</artifactId> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-jdbc</artifactId> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-log4j</artifactId> 
    </dependency> 

    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-validator</artifactId> 
    </dependency> 

    <dependency> 
     <groupId>org.postgresql</groupId> 
     <artifactId>postgresql</artifactId> 
    </dependency> 

    <dependency> 
     <groupId>jstl</groupId> 
     <artifactId>jstl</artifactId> 
     <version>1.2</version> 
    </dependency> 

    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>javax.servlet-api</artifactId> 
    </dependency> 

    <dependency> 
     <groupId>org.apache.taglibs</groupId> 
     <artifactId>taglibs-standard-impl</artifactId> 
     <version>1.2.5</version> 
    </dependency> 
</dependencies> 
+0

разместим ваш web.xml – shinjw

+0

@shinjw - У меня нет web.xml. С Spring Boot он не нужен – Ascalonian

+0

<% @ taglib uri = "http://java.sun.com/jsp/jstl/core" prefix = "c"%> Попробуйте добавить это в начало jsp , также убедитесь, что ваш maven pom.xml включает jstl – shinjw

ответ

2

Добавьте ниже зависимости в pom.xml:

<dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-tomcat</artifactId> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.tomcat.embed</groupId> 
     <artifactId>tomcat-embed-jasper</artifactId> 
     <scope>provided</scope> 
    </dependency> 

Вы, возможно, придется добавить ниже, чтобы избежать зависимости javax.servlet.ServletException: java.lang.NoSuchMethodError: org.apache.el.lang.ELSupport.coerceToType. Если вы не указали это как scope=required, тогда tomcat-embed-el-8.0.32.jar будет размещен в вашей папке Tomcat 8.0\webapps\AppName\WEB-INF\lib и вызовет ошибку выше. Вам не нужно добавлять зависимость ниже, если вы запустите приложение из IDE или mvn Spring-boot:run.

<dependency> 
     <groupId>org.apache.tomcat.embed</groupId> 
     <artifactId>tomcat-embed-el</artifactId> 
     <scope>provided</scope> 
    </dependency> 

Затем посетим - http://localhost:8080/AppName/view/greeting?name=Mikey

Установите этот флажок для репо Complete Source Code.

UPDATE: Проблема Tomcat war deployment of JSP sample is not working due to "tomcat-embed-el" dependency фиксируется в Spring Boot - 1.4.0.M2

+0

Я добавил всех троих к моему pom и сделал новую установку Maven. Теперь, когда я перехожу к URL-адресу, контроллер не достигнут, и страница окажется пустой. – Ascalonian

+0

Вы проверили это [репо] (https://github.com/RawSanj/SOFRepos/tree/master/Spring-Boot-Jsp- Demo)? Я сопоставил точный URL-адрес, который вы задали в вопросе. –

+0

Я получил его для работы. Это потому, что у меня была Конфигурация в неправильном месте. Спасибо вам за помощь! – Ascalonian

Смежные вопросы