Spring Boot MVC 不使用 JSP 中的模型值 [英] Spring Boot MVC not using model values in JSP

查看:37
本文介绍了Spring Boot MVC 不使用 JSP 中的模型值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在开发一个 Spring Boot MVC 应用程序.我的问题是,当视图出现时,它不会解析模型中的值.

I am working on an Spring Boot MVC application. My issue is that when the view appears, it does not parse the values from the Model.

application.properties

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

配置

@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:

你好 ${name},你好吗?

Hello ${name}, How are you?

我也尝试过返回一个 ModelAndView.我不知道为什么它没有将Mikey"放在 ${name} 所在的位置.

I have also tried returning a ModelAndView. I am not sure why it's not putting "Mikey" in where ${name} is.

更新

每次我向 JSP 页面添加 taglib 或任何东西时,它都会显示页面源代码.它不呈现页面.下面是我的 pom.xml

Every time I add a taglib or anything to the JSP page, it displays the page source. It doesn't render the page. Below is my 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>

推荐答案

在您的 pom.xml 中添加以下依赖项:

Add below dependencies in your 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 命令运行您的应用程序,则不需要添加以下依赖项.

You might have to add below dependency to avoid 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. You don't need to add below dependency if you run your app from IDE or mvn Spring-boot:run command.

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

然后访问-http://localhost:8080/AppName/view/greeting?name=米奇

检查此存储库以获取完整源代码.

更新:问题 JSP 示例的 Tomcat war 部署由于tomcat-embed-el" 依赖Spring Boot 中得到修复 -1.4.0.M2

这篇关于Spring Boot MVC 不使用 JSP 中的模型值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆