首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用Java注解的ViewResolver

使用Java注解的ViewResolver
EN

Stack Overflow用户
提问于 2013-01-21 01:05:58
回答 3查看 31.7K关注 0票数 22

在Java3.1.1中是否可以使用Spring注解来配置视图解析器?

我已经完成了使用Java的所有配置,但我仍然只能使用视图解析器

代码

代码语言:javascript
复制
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文件中配置一个视图解析器,它就能正常工作。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-01-21 02:02:46

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

代码语言:javascript
复制
@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;
    }
}
票数 35
EN

Stack Overflow用户

发布于 2016-11-17 18:35:15

我用Spring 4.3.4测试了你的场景,它工作正常。我建议仔细检查您扫描的包,以及是否正确提供了AppConfig。我附加了从你的AppConfig开始的所有文件。然而,扩展WebMvcConfigurerAdapter是一件好事。所附的源代码并不理想,它过于简单化,只是为了重现您所报告的问题。

从AppConfig开始:

代码语言:javascript
复制
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;
    }

}

然后:

代码语言:javascript
复制
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[] { "/" };
        }
    }

最后:

代码语言:javascript
复制
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");
    }
}
票数 2
EN

Stack Overflow用户

发布于 2015-12-04 00:37:26

上面的问题是,在定义bean getViewResolver之前调用了DispatcherServlet.initViewResolvers get,并且它找不到bean,所以它从来没有添加视图解析器。

如果您将bean定义移动到xml定义中,它将被拾取。由于某些原因,如果MvcConfiguration中没有定义DispatcherServlet,那么您定义的XML类不会触发ViewResolvers刷新。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14426947

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档