Spring启动时不显示ModelAndView值

时间:2015-07-29 08:51:21

标签: java spring jsp spring-boot

我无法在jsp中显示添加到模型中的值。我已尝试过所有内容并检查stackoverflow上的所有答案,但没有任何帮助。

为节省时间,我粘贴了部分代码:

我的pom.xml

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

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

我的java配置代码是:

@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);
    }
}

@EnableWebMvc
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {
    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }

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

我的控制器是:

@Controller
@RequestMapping(value = "workorder")
public class WorkOrderController {

    @RequestMapping(value = "/toProviewPage", method = RequestMethod.GET)
    public ModelAndView toPreview(){
        WorkOrderVo workOrderVo = new WorkOrderVo();
        workOrderVo.setId(1);
        workOrderVo.setName("xxx");
        workOrderVo.setPriority(1);
        workOrderVo.setDetail("xxxx");
        return new ModelAndView("workOrderPreview", "workOrderVo", workOrderVo);
    }
}

我的jsp文件是:

<%@ page language="java" contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html lang="en">

<div class="form-group">
    <label for="detail" class="col-sm-2 control-label">Detail</label>
    <div class="col-sm-10">
        <textarea class="form-control" rows="5" id="detail" name="detail" value="${workOrderVo.dreadonly="true"></textarea>
    </div>
</div>

但是春天启动没有被重新启动是作为一个jsp文件,并显示所有的HTML代码是浏览器。

我写错误的地方?

2 个答案:

答案 0 :(得分:1)

使用“嵌入式Tomcat”时,无法直接为应用程序运行main()方法。如果你查看你的POM,它表明提供了Jasper依赖关系意味着它希望你的工件被放在一个Tomcat容器中。在应用程序中运行main()方法实际上并没有加载Jasper,这就是为什么你没有看到将页面作为JSP处理的原因。对于IntelliJ,您需要设置Maven运行配置(而不是应用程序)并使用spring-boot:run,它显然会为您设置Tomcat。这是一张如何设置它的图片。 Maven Run Setup
我用你的应用程序做了它,似乎正在处理JSP。我没有在GitHub中看到您在上面引用的确切代码,但我注意到预览页面有一个已处理的JSP标记。没有任何价值,但标签被替换了。我不清楚这是记录在案的所以我从this question得到了一个提示。如果有人发现官方的Spring Boot文档清楚地告诉我,我会更新它。

答案 1 :(得分:0)

我总结了目前的两个可行解决方案:

  • 第一:

修改pom依赖关系,更改:

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

<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
</dependency>
  • 第二个:

使用spring-boot:run命令启动应用程序。