Spring mvc SpringMVC与使用Java配置的ApacheTiles 3的集成存在问题

Spring mvc SpringMVC与使用Java配置的ApacheTiles 3的集成存在问题,spring-mvc,apache-tiles,Spring Mvc,Apache Tiles,问题在于没有应用平铺配置 每次。 我已经将ApacheTiles 3与SpringMVC集成。我使用了spring基于注释的配置。应用程序中的问题是瓷砖定义是随机应用的。当我尝试运行应用程序时,我们配置的tiles配置可能会应用,也可能不会应用 我正在使用ApacheTomcat7。这个问题与服务器有关吗?这个问题与配置有关吗?或者如果有的话 这是我的密码 MVC配置 Annotation base Java Configuration using Spring

问题在于没有应用平铺配置 每次。 我已经将ApacheTiles 3与SpringMVC集成。我使用了spring基于注释的配置。应用程序中的问题是瓷砖定义是随机应用的。当我尝试运行应用程序时,我们配置的tiles配置可能会应用,也可能不会应用

我正在使用ApacheTomcat7。这个问题与服务器有关吗?这个问题与配置有关吗?或者如果有的话

这是我的密码

MVC配置

        Annotation base Java Configuration using Spring
        @EnableWebMvc

        @Configuration

        @ComponentScan(basePackages = { "com.om.*" })

        public class MVCConfig extends WebMvcConfigurerAdapter {


            @Override
            public void addResourceHandlers(ResourceHandlerRegistry registry) {
                registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
            }


            @Override
            public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
                configurer.enable();
            }
            @Bean
            public InternalResourceViewResolver viewResolver() {
                InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
                viewResolver.setViewClass(JstlView.class);
                viewResolver.setPrefix("/WEB-INF/views/layout/");
                viewResolver.setSuffix(".jsp");
                return viewResolver;
            }


            @Bean
            public TilesViewResolver getTilesViewResolver() {
                TilesViewResolver tilesViewResolver = new TilesViewResolver();
                tilesViewResolver.setViewClass(TilesView.class);
                return tilesViewResolver;
            }
            @Bean
            public TilesConfigurer getTilesConfigurer() {
                TilesConfigurer tilesConfigurer = new TilesConfigurer();
                tilesConfigurer.setCheckRefresh(true);
                tilesConfigurer.setDefinitionsFactoryClass(TilesDefinitionsConfig.class);

                // Add apache tiles definitions
                TilesDefinitionsConfig.addDefinitions();

                return tilesConfigurer;
            }
        }
MVC初始化器

        public class MVCInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

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

            @Override
            protected Class<?>[] getServletConfigClasses() {
                return null;
            }

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


        }
        public final class TilesDefinitionsConfig implements DefinitionsFactory {

            private static final Map<String, Definition> tilesDefinitions = new HashMap<String,Definition>();
            private static final Attribute BASE_TEMPLATE = new Attribute("/WEB-INF/views/layout/defaultLayout.jsp");

            public Definition getDefinition(String name, Request tilesContext) {
                System.out.println("3");
                return tilesDefinitions.get(name);
            }

            /**
             * @param name <code>Name of the view</code>
             * @param title <code>Page title</code>
             * @param body <code>Body JSP file path</code>
             *
             * <code>Adds default layout definitions</code>
             */
            private static void addDefaultLayoutDef(String name, String title, String body) {
                Map<String, Attribute> attributes = new HashMap<String,Attribute>();

                attributes.put("title", new Attribute(title));
                attributes.put("header", new Attribute("/WEB-INF/views/layout/header.jsp"));
                attributes.put("menu", new Attribute("/WEB-INF/views/layout/menu.jsp"));
                attributes.put("body", new Attribute(body));
                attributes.put("footer", new Attribute("/WEB-INF/views/layout/footer.jsp"));

                tilesDefinitions.put(name, new Definition(name, BASE_TEMPLATE, attributes));
            }

            /**
             * <code>Add Apache tiles definitions</code>
             */
            public static void addDefinitions(){

                addDefaultLayoutDef("welcome", "welcome", "/WEB-INF/views/layout/welcome.jsp");
                addDefaultLayoutDef("personList", "viewPerson", "/WEB-INF/views/layout/personList.jsp");

            }
        }
控制器

        @Controller

        public class SpringTilesController {


            @RequestMapping(value="welcome")
            public ModelAndView index() {

                ModelAndView model=new ModelAndView();
                System.out.println("In Controller");
                model.setViewName("welcome");       
                return model;
            }

            @RequestMapping(value="viewPerson")
            public ModelAndView viewPersons(Model model) {
                Map<String, List<Person>> persons = 
                        new HashMap<String, List<Person>>();
                persons.put("persons", Person.createPersons());
                return new ModelAndView("personList", persons);
            }
        }
@控制器
公共类SpringTileController{
@请求映射(value=“welcome”)
公共模型和视图索引(){
ModelAndView模型=新的ModelAndView();
System.out.println(“控制器内”);
model.setViewName(“欢迎”);
收益模型;
}
@请求映射(value=“viewPerson”)
公共模型和视图视口(模型模型){
地图人物=
新的HashMap();
persons.put(“persons”,Person.createPersons());
返回新模型和视图(“personList”,persons);
}
}
实体

        public class Person {

            private String name, email;
            private int age;

            public Person(String name, String email, int age) {
                this.name = name;
                this.email = email;
                this.age = age;
            }

            public String getName() {return name;}
            public void setName(String name) {this.name = name;}

            public String getEmail() {return email;}
            public void setEmail(String email) {this.email = email;}

            public int getAge() {return age;}
            public void setAge(int age) {this.age = age;}

            @Override
            public String toString()
            { 
                return String.format(
                    "Person [name = %s, email = %s, age = %d]", 
                        name, email, age);
            }

            public static List<Person> createPersons() {
                List<Person> persons = new ArrayList<Person>();
                persons.add(new Person("Tousif", "tousif@mail.com", 32));
                persons.add(new Person("Asif", "asif@mail.com", 28));
                persons.add(new Person("Ramiz", "ramiz@mail.com", 26));
                persons.add(new Person("Rizwan", "rizwan@mail.com", 32));
                persons.add(new Person("Amol", "amol@mail.com", 33));
                persons.add(new Person("Ramdas", "ramdas@mail.com", 31));
                return persons;
            }
        }
公共类人物{
私人字符串名称,电子邮件;
私人互联网;
公众人物(字符串名称、字符串电子邮件、整数){
this.name=名称;
this.email=电子邮件;
这个。年龄=年龄;
}
公共字符串getName(){return name;}
public void setName(字符串名){this.name=name;}
公共字符串getEmail(){return email;}
public void setEmail(字符串email){this.email=email;}
public int getAge(){return age;}
public void setAge(int age){this.age=age;}
@凌驾
公共字符串toString()
{ 
返回字符串格式(
“人员[姓名=%s,电子邮件=%s,年龄=%d]”,
姓名、电子邮件、年龄);
}
公共静态列表createPersons(){
List persons=new ArrayList();
人员。添加(新人员(“Tousif”)tousif@mail.com", 32));
人员。添加(新人员(“Asif”)asif@mail.com", 28));
人员。添加(新人员(“Ramiz”ramiz@mail.com", 26));
人员。添加(新人员(“Rizwan”)rizwan@mail.com", 32));
人员。添加(新人员(“Amol”)amol@mail.com", 33));
人员。添加(新人员(“拉姆达斯”)ramdas@mail.com", 31));
返回人员;
}
}
pom.xml

        <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
            <modelVersion>4.0.0</modelVersion>
            <groupId>com.om</groupId>
            <artifactId>TilesDemo</artifactId>
            <packaging>war</packaging>
            <version>0.0.1-SNAPSHOT</version>
            <name>TilesDemo Maven Webapp</name>
            <url>http://maven.apache.org</url>

            <properties>
                <jdk.version>1.7</jdk.version>
                <spring.version>4.1.6.RELEASE</spring.version>
                <spring.security.version>4.0.1.RELEASE</spring.security.version>
                <jstl.version>1.2</jstl.version>
                <javax.servlet.version>3.1.0</javax.servlet.version>
                <mysql.connector.version>5.1.31</mysql.connector.version>
            </properties>


            <dependencies>
                <dependency>
                    <groupId>junit</groupId>
                    <artifactId>junit</artifactId>
                    <version>3.8.1</version>
                    <scope>test</scope>
                </dependency>
                <!-- jstl for jsp page -->


                <dependency>
                    <groupId>javax.servlet</groupId>
                    <artifactId>javax.servlet-api</artifactId>
                    <version>3.1.0</version>
                </dependency>

                <dependency>
                    <groupId>jstl</groupId>
                    <artifactId>jstl</artifactId>
                    <version>${jstl.version}</version>
                </dependency>

                <!-- Apache Tiles -->
                <dependency>
                    <groupId>org.apache.tiles</groupId>
                    <artifactId>tiles-api</artifactId>
                    <version>3.0.5</version>
                    <scope>compile</scope>
                </dependency>
                <dependency>
                    <groupId>org.apache.tiles</groupId>
                    <artifactId>tiles-core</artifactId>
                    <version>3.0.5</version>
                    <scope>compile</scope>
                </dependency>
                <dependency>
                    <groupId>org.apache.tiles</groupId>
                    <artifactId>tiles-jsp</artifactId>
                    <version>3.0.5</version>
                    <scope>compile</scope>
                </dependency>
                <dependency>
                    <groupId>org.apache.tiles</groupId>
                    <artifactId>tiles-servlet</artifactId>
                    <version>3.0.5</version>
                    <scope>compile</scope>
                </dependency>
                <dependency>
                    <groupId>org.apache.tiles</groupId>
                    <artifactId>tiles-template</artifactId>
                    <version>3.0.5</version>
                    <scope>compile</scope>
                </dependency>
                <dependency>
                    <groupId>org.apache.tiles</groupId>
                    <artifactId>tiles-el</artifactId>
                    <version>3.0.5</version>
                    <scope>compile</scope>
                </dependency>

                <!-- Spring 4 dependencies -->
                <dependency>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-core</artifactId>
                    <version>${spring.version}</version>
                </dependency>

                <dependency>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-jdbc</artifactId>
                    <version>${spring.version}</version>
                </dependency>


                <dependency>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-web</artifactId>
                    <version>${spring.version}</version>
                </dependency>

                <dependency>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-webmvc</artifactId>
                    <version>${spring.version}</version>
                </dependency>
            </dependencies>
            <build>
                <finalName>TilesDemo</finalName>
            </build>

        </project>

4.0.0
com.om

  • welcome.jsp
    这是将应用页眉、页脚和菜单的正文页

        <div style="margin:10px;">
            <h3>SpringMVC - Tiles3 Integration tutorial</h3>
            <p>By:- XYZ</p>
        </div>
    
    
    SpringMVC-Tiles3集成教程
    作者:-XYZ


    问题是没有每次都应用tiles配置。

    正如您在本项目中看到的,开发人员也有类似的问题,tiles配置不起作用

    他发现,如果使用与file.jsp相同的名称调用视图,就会出现一些问题

    public static void addDefinitions(){
    
                addDefaultLayoutDef("welcome", "welcome", "/WEB-INF/views/layout/welcome.jsp");
                addDefaultLayoutDef("personList", "viewPerson", "/WEB-INF/views/layout/personList.jsp");
    }
    
    尝试为视图和文件.jsp使用不同的名称。 试一试


    如果代码的其余部分正确,则应该可以工作。

    可能需要定义视图解析器的顺序优先级,如下所示:

    @Bean
    public InternalResourceViewResolver internalResourceViewResolver(){
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setViewClass(JstlView.class);
        resolver.setPrefix("/WEB-INF/pages/");
        resolver.setSuffix(".jsp");
    
        //resolver.setOrder(2);
    
        return resolver;
    }
    
    //configuracion de apache tiles
    @Bean
    public TilesViewResolver getTilesViewResolver() {
        TilesViewResolver tilesViewResolver = new TilesViewResolver();
        tilesViewResolver.setViewClass(TilesView.class);
    
        // tiles view resolver va ha ser el primero en mostrarse
        tilesViewResolver.setOrder(1);
    
        return tilesViewResolver;
    }
    
        <%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
        <ul style="list-style:none;line-height:28px;">
    
            <li><spring:url value="/index" var="homeUrl" htmlEscape="true" />
                <a href="/TilesDemo/welcome">Home</a>
            </li>
    
            <li><spring:url value="/viewPerson" var="personListUrl" htmlEscape="true" />
                <a href="/TilesDemo/viewPerson">Person List</a>
            </li>
    
        </ul>
    
        <div style="margin:10px;">
            <h3>SpringMVC - Tiles3 Integration tutorial</h3>
            <p>By:- XYZ</p>
        </div>
    
    public static void addDefinitions(){
    
                addDefaultLayoutDef("welcome", "welcome", "/WEB-INF/views/layout/welcome.jsp");
                addDefaultLayoutDef("personList", "viewPerson", "/WEB-INF/views/layout/personList.jsp");
    }
    
    addDefaultLayoutDef("welcome", "Welcome", "/WEB-INF/views/layout/welcome.jsp");
    
    @Bean
    public InternalResourceViewResolver internalResourceViewResolver(){
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setViewClass(JstlView.class);
        resolver.setPrefix("/WEB-INF/pages/");
        resolver.setSuffix(".jsp");
    
        //resolver.setOrder(2);
    
        return resolver;
    }
    
    //configuracion de apache tiles
    @Bean
    public TilesViewResolver getTilesViewResolver() {
        TilesViewResolver tilesViewResolver = new TilesViewResolver();
        tilesViewResolver.setViewClass(TilesView.class);
    
        // tiles view resolver va ha ser el primero en mostrarse
        tilesViewResolver.setOrder(1);
    
        return tilesViewResolver;
    }