视图解析器使用Java注释(ViewResolver using Java annotation)

2019-08-07 14:11发布

是否有可能在春季 3.1.1配置使用Java注释的视图解析器?

我使用Java注释所有配置完成,但我坚持在视图解析器

package com;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import javax.sql.DataSource;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import com.*;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
import org.springframework.web.servlet.view.UrlBasedViewResolver;
import org.springframework.web.servlet.view.JstlView;

@Configuration
@ComponentScan("com")
public class AppConfig
{
    {
          //Other bean declarations
    }

    @Bean
    public UrlBasedViewResolver urlBasedViewResolver()
    {
        UrlBasedViewResolver res = new InternalResourceViewResolver();
        res.setViewClass(JstlView.class);
        res.setPrefix("/WEB-INF/");
        res.setSuffix(".jsp");

        return res;
    }
}

我用这个代码,并运行应用程序,但它没有返回相应的视图。 但是,如果我在配置视图解析器 app-servlet.xml文件,它工作正常。

Answer 1:

你的类应该扩展WebMvcConfigurerAdapter类。 请看看下面的例子

@Configuration
@ComponentScan(basePackages="com")
@EnableWebMvc
public class MvcConfiguration extends WebMvcConfigurerAdapter{

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


Answer 2:

我与Spring 4.3.4测试您的情况,它是工作确定。 我建议你扫描双重检查包和AppConfig的正常提供。 我附上您的AppConfig开始的所有文件。 然而,这是很好的扩展WebMvcConfigurerAdapter。 附源代码是不理想的,它那简单,只尝试重现您举报的问题。

从AppConfig中开始:

package com;

import org.springframework.context.annotation.*;
import org.springframework.web.servlet.view.*;

@Configuration
@ComponentScan("com")
public class AppConfig {
    @Bean
    public UrlBasedViewResolver getViewResovler() {
        UrlBasedViewResolver urlBasedViewResolver = new UrlBasedViewResolver();
        urlBasedViewResolver.setViewClass(JstlView.class);
        urlBasedViewResolver.setPrefix("/WEB-INF/jsp/");
        urlBasedViewResolver.setSuffix(".jsp");
        return urlBasedViewResolver;
    }

}

然后:

package com;

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

    public class WebInit extends AbstractAnnotationConfigDispatcherServletInitializer {

        @Override
        protected Class<?>[] getRootConfigClasses() {
            return new Class<?>[] { };
        }

        @Override
        protected Class<?>[] getServletConfigClasses() {
            return new Class<?>[] { AppConfig.class };
        }

        @Override
        protected String[] getServletMappings() {
            return new String[] { "/" };
        }
    }

最后:

package com;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class MainController {

    @RequestMapping("/")
    public ModelAndView asdf() {
        return new ModelAndView("ABC");
    }
}


Answer 3:

与上面的问题是,被定义豆getViewResolver前DispatcherServlet.initViewResolvers得到叫,所以它永远不会添加视图解析器无法找到这个bean。

如果将bean定义为一个XML定义,它得到的回升。 出于某种原因,你所定义的MvcConfiguration类,如果没有在XML定义ViewResolvers不会触发DispatcherServlet的刷新。



文章来源: ViewResolver using Java annotation