简体   繁体   English

Spring Boot MVC在JSP中不使用模型值

[英]Spring Boot MVC not using model values in JSP

I am working on an Spring Boot MVC application. 我正在开发Spring Boot MVC应用程序。 My issue is that when the view appears, it does not parse the values from the Model. 我的问题是,当视图出现时,它不会解析模型中的值。

application.properties 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;
    }
}

Application 应用

@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 调节器

@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 greeting.jsp中

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

Output from http://localhost:8080/test-mvc/view/greeting?name=Mikey : 来自http:// localhost:8080 / test-mvc / view / greeting?name = Mikey的输出

Hello ${name}, How are you? 您好$ {name},您好吗?

I have also tried returning a ModelAndView. 我也尝试过返回ModelAndView。 I am not sure why it's not putting "Mikey" in where ${name} is. 我不确定为什么不将${name}放在“ Mikey”中。

Update 更新

Every time I add a taglib or anything to the JSP page, it displays the page source. 每次我向JSP页面添加一个标记库或任何东西时,它都会显示页面源。 It doesn't render the page. 它不会呈现页面。 Below is my pom.xml 下面是我的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>

Add below dependencies in your pom.xml : 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>

You might have to add below dependency to avoid javax.servlet.ServletException: java.lang.NoSuchMethodError: org.apache.el.lang.ELSupport.coerceToType . 您可能必须添加以下依赖项,以避免javax.servlet.ServletException: java.lang.NoSuchMethodError: org.apache.el.lang.ELSupport.coerceToType If you don't add this as scope=required then tomcat-embed-el-8.0.32.jar will be placed in your Tomcat 8.0\\webapps\\AppName\\WEB-INF\\lib folder and will cause above error. 如果您未按scope=required添加它,则tomcat-embed-el-8.0.32.jar将放置在Tomcat 8.0\\webapps\\AppName\\WEB-INF\\lib文件夹中,并会导致上述错误。 You don't need to add below dependency if you run your app from IDE or mvn Spring-boot:run command. 如果从IDE或mvn Spring-boot:run命令运行应用程序,则无需添加以下依赖项。

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

Then visit - http://localhost:8080/AppName/view/greeting?name=Mikey 然后访问-http:// localhost:8080 / AppName / view / greeting?name = Mikey

Check this repo for Complete Source Code . 检查此仓库以获取完整的源代码

UPDATE: The issue Tomcat war deployment of JSP sample is not working due to "tomcat-embed-el" dependency is fixed in Spring Boot - 1.4.0.M2 更新: 由于“ tomcat-embed-el”依赖性Spring Boot-1.4.0.M2中已修复, 因此JSP示例的Tomcat战争部署无法正常工作

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM