2014-01-09 5 views
1

У меня есть проект с "Spring MVC", и я хочу, чтобы добавить "Twitter Bootstrap 3"Spring MVC + Twitter Bootstrap 3 + Webjar

Вот часть кода

Initializer.java

package com.restaurant.init; 

import javax.servlet.ServletContext; 
import javax.servlet.ServletException; 
import javax.servlet.ServletRegistration.Dynamic; 

import org.springframework.web.WebApplicationInitializer; 
import org.springframework.web.context.ContextLoaderListener; 
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; 
import org.springframework.web.servlet.DispatcherServlet; 

public class Initializer implements WebApplicationInitializer { 

     public void onStartup(ServletContext servletContext) 
         throws ServletException { 
       AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext(); 
       ctx.register(WebAppConfig.class); 
       servletContext.addListener(new ContextLoaderListener(ctx)); 

       ctx.setServletContext(servletContext); 

       Dynamic servlet = servletContext.addServlet("dispatcher", new DispatcherServlet(ctx)); 
       servlet.addMapping("/"); 
       servlet.setLoadOnStartup(1); 
     } 

} 

WebAppConfig.java

package com.restaurant.init; 

import java.util.Properties; 

import javax.annotation.Resource; 
import javax.sql.DataSource; 

import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.ComponentScan; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.context.annotation.PropertySource; 
import org.springframework.core.env.Environment; 
import org.springframework.jdbc.datasource.DriverManagerDataSource; 
import org.springframework.orm.hibernate4.HibernateTransactionManager; 
import org.springframework.orm.hibernate4.LocalSessionFactoryBean; 
import org.springframework.transaction.annotation.EnableTransactionManagement; 
import org.springframework.web.servlet.config.annotation.EnableWebMvc; 
import org.springframework.web.servlet.view.JstlView; 
import org.springframework.web.servlet.view.UrlBasedViewResolver; 

@Configuration 
@ComponentScan("com.restaurant") 
@EnableWebMvc 
@EnableTransactionManagement 
@PropertySource("classpath:application.properties") 
public class WebAppConfig { 

    private static final String PROPERTY_NAME_DATABASE_DRIVER = "db.driver"; 
    private static final String PROPERTY_NAME_DATABASE_PASSWORD = "db.password"; 
    private static final String PROPERTY_NAME_DATABASE_URL = "db.url"; 
    private static final String PROPERTY_NAME_DATABASE_USERNAME = "db.username"; 

    private static final String PROPERTY_NAME_HIBERNATE_DIALECT = "hibernate.dialect"; 
    private static final String PROPERTY_NAME_HIBERNATE_SHOW_SQL = "hibernate.show_sql"; 
    private static final String PROPERTY_NAME_CONNECTION_POOL_SIZE = "hibernate.connection_pool_size"; 
    private static final String PROPERTY_NAME_HIBERNATE_HBM2DDL_AUTO = "hibernate.hbm2ddl.auto"; 
    private static final String PROPERTY_NAME_ENTITYMANAGER_PACKAGES_TO_SCAN = "entitymanager.packages.to.scan"; 

    @Resource 
    private Environment env; 

    @Bean 
    public DataSource dataSource() { 
     DriverManagerDataSource dataSource = new DriverManagerDataSource(); 

     dataSource.setDriverClassName(env.getRequiredProperty(PROPERTY_NAME_DATABASE_DRIVER)); 
     dataSource.setUrl(env.getRequiredProperty(PROPERTY_NAME_DATABASE_URL)); 
     dataSource.setUsername(env.getRequiredProperty(PROPERTY_NAME_DATABASE_USERNAME)); 
     dataSource.setPassword(env.getRequiredProperty(PROPERTY_NAME_DATABASE_PASSWORD)); 

     return dataSource; 
    } 

    @Bean 
    public LocalSessionFactoryBean sessionFactory() { 
     LocalSessionFactoryBean sessionFactoryBean = new LocalSessionFactoryBean(); 
     sessionFactoryBean.setDataSource(dataSource()); 
     sessionFactoryBean.setPackagesToScan(env.getRequiredProperty(PROPERTY_NAME_ENTITYMANAGER_PACKAGES_TO_SCAN)); 
     sessionFactoryBean.setHibernateProperties(hibProperties()); 
     return sessionFactoryBean; 
    } 

    private Properties hibProperties() { 
     Properties properties = new Properties(); 
     properties.put(PROPERTY_NAME_HIBERNATE_DIALECT, env.getRequiredProperty(PROPERTY_NAME_HIBERNATE_DIALECT)); 
     properties.put(PROPERTY_NAME_HIBERNATE_SHOW_SQL, env.getRequiredProperty(PROPERTY_NAME_HIBERNATE_SHOW_SQL)); 
     properties.put(PROPERTY_NAME_CONNECTION_POOL_SIZE, env.getRequiredProperty(PROPERTY_NAME_CONNECTION_POOL_SIZE)); 
     properties.put(PROPERTY_NAME_HIBERNATE_HBM2DDL_AUTO, env.getRequiredProperty( PROPERTY_NAME_HIBERNATE_HBM2DDL_AUTO)); 
     return properties; 
    } 

    @Bean 
    public HibernateTransactionManager transactionManager() { 
     HibernateTransactionManager transactionManager = new HibernateTransactionManager(); 
     transactionManager.setSessionFactory(sessionFactory().getObject()); 
     return transactionManager; 
    } 

    @Bean 
    public UrlBasedViewResolver setupViewResolver() { 
     UrlBasedViewResolver resolver = new UrlBasedViewResolver(); 
     resolver.setPrefix("/WEB-INF/pages/"); 
     resolver.setSuffix(".jsp"); 
     resolver.setViewClass(JstlView.class); 
     return resolver; 
    } 

} 

Я tryied используя Webjars добавления зависимости в POM и м odifying СПЯ

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/xsd/maven-4.0.0.xsd" 
    <modelVersion 4.0.0</modelVersion 
    <groupId com.restaurant</groupId 
    <artifactId web-crud</artifactId 
    <version 0.0.1-SNAPSHOT</version 
    <packaging war</packaging 


    <build 
     <finalName web-crud</finalName 
     <plugins 
      <plugin 
       <artifactId maven-compiler-plugin</artifactId 
       <version 3.1</version 
       <configuration 
        <source 1.7</source 
        <target 1.7</target 
       </configuration 
      </plugin 
     </plugins 
    </build 

    <properties 
     <project.build.sourceEncoding UTF-8</project.build.sourceEncoding 
     <hibernate.version 4.2.0.Final</hibernate.version 
     <mysql.connector.version 5.1.21</mysql.connector.version 
     <spring.version 3.2.2.RELEASE</spring.version 
    </properties 

    <dependencies 
     <!-- DB related dependencies -- 
     <dependency 
      <groupId org.hibernate</groupId 
      <artifactId hibernate-core</artifactId 
      <version ${hibernate.version}</version 
     </dependency 
     <dependency 
      <groupId org.hibernate</groupId 
      <artifactId hibernate-entitymanager</artifactId 
      <version ${hibernate.version}</version 
     </dependency 
     <dependency 
      <groupId mysql</groupId 
      <artifactId mysql-connector-java</artifactId 
      <version ${mysql.connector.version}</version 
     </dependency 
     <dependency 
      <groupId commons-dbcp</groupId 
      <artifactId commons-dbcp</artifactId 
      <version 1.4</version 
     </dependency 
     <dependency 
      <groupId javassist</groupId 
      <artifactId javassist</artifactId 
      <version 3.12.1.GA</version 
     </dependency 
     <!-- SPRING -- 
     <dependency 
      <groupId org.springframework</groupId 
      <artifactId spring-webmvc</artifactId 
      <version ${spring.version}</version 
     </dependency 
     <dependency 
      <groupId org.springframework</groupId 
      <artifactId spring-tx</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-orm</artifactId 
      <version ${spring.version}</version 
     </dependency 
     <!-- CGLIB is required to process @Configuration classes -- 
     <dependency 
      <groupId cglib</groupId 
      <artifactId cglib</artifactId 
      <version 2.2.2</version 
     </dependency 
     <!-- Servlet API and JSTL -- 
     <dependency 
      <groupId javax.servlet</groupId 
      <artifactId javax.servlet-api</artifactId 
      <version 3.0.1</version 
      <scope provided</scope 
     </dependency 
     <dependency 
      <groupId jstl</groupId 
      <artifactId jstl</artifactId 
      <version 1.2</version 
     </dependency 

     <!-- Test -- 
     <dependency 
      <groupId junit</groupId 
      <artifactId junit</artifactId 
      <version 4.7</version 
      <scope test</scope 
     </dependency 
     <dependency 
      <groupId org.springframework</groupId 
      <artifactId spring-test</artifactId 
      <version ${spring.version}</version 
      <scope test</scope 
     </dependency 

     <dependency 
      <groupId org.webjars</groupId 
      <artifactId jquery</artifactId 
      <version 2.0.3-1</version 
     </dependency 

     <dependency 
      <groupId org.webjars</groupId 
      <artifactId bootstrap</artifactId 
      <version 3.0.3</version 
     </dependency 
    </dependencies 
</project 

index.jsp

<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"% 
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"% 
<%@ page session="false"% 

<!DOCTYPE html 
<html 
<head 
<title Bootstrap test</title 
<!-- Twitter Bootstrap -- 
<spring:url value="/webjars/bootstrap/3.0.3/css/bootstrap.min.css" 
    var="bootstrapCSS"/
<link href="${bootstrapCSS}" rel="stylesheet"/
<spring:url value="/webjars/bootstrap/3.0.3/css/bootstrap-theme.min.css" 
    var="bootstrapCSStheme"/
<link href="${bootstrapCSStheme}" rel="stylesheet"/
<!-- jQuery UI -- 
<spring:url value="/webjars/jquery-ui/1.10.3/themes/base/jquery-ui.css" 
    var="jQueryUIcss"/
<link href="${jQueryUIcss}" rel="stylesheet" </link 
</head 
<body 
    <nav class="navbar navbar-default" role="navigation" 
     <!-- Brand and toggle get grouped for better mobile display -- 
     <div class="navbar-header" 
      <button type="button" class="navbar-toggle" data-toggle="collapse" 
       data-target="#bs-example-navbar-collapse-1" 
       <span class="sr-only" Toggle navigation</span <span 
        class="icon-bar" </span <span class="icon-bar" </span <span 
        class="icon-bar" </span 
      </button 
      <a class="navbar-brand" href="#" Brand</a 
     </div 

     <!-- Collect the nav links, forms, and other content for toggling -- 
     <div class="collapse navbar-collapse" 
      id="bs-example-navbar-collapse-1" 
      <ul class="nav navbar-nav" 
       <li class="active" <a href="#" Link</a </li 
       <li <a href="#" Link</a </li 
       <li class="dropdown" <a href="#" class="dropdown-toggle" 
        data-toggle="dropdown" Dropdown <b class="caret" </b </a 
        <ul class="dropdown-menu" 
         <li <a href="#" Action</a </li 
         <li <a href="#" Another action</a </li 
         <li <a href="#" Something else here</a </li 
         <li class="divider" </li 
         <li <a href="#" Separated link</a </li 
         <li class="divider" </li 
         <li <a href="#" One more separated link</a </li 
        </ul </li 
      </ul 
      <form class="navbar-form navbar-left" role="search" 
       <div class="form-group" 
        <input type="text" class="form-control" placeholder="Search" 
       </div 
       <button type="submit" class="btn btn-default" Submit</button 
      </form 
      <ul class="nav navbar-nav navbar-right" 
       <li <a href="#" Link</a </li 
       <li class="dropdown" <a href="#" class="dropdown-toggle" 
        data-toggle="dropdown" Dropdown <b class="caret" </b </a 
        <ul class="dropdown-menu" 
         <li <a href="#" Action</a </li 
         <li <a href="#" Another action</a </li 
         <li <a href="#" Something else here</a </li 
         <li class="divider" </li 
         <li <a href="#" Separated link</a </li 
        </ul </li 
      </ul 
     </div 
     <!-- /.navbar-collapse -- 
    </nav 
</body 
</html 

Но я получаю эту ошибку

Jan 10, 2014 1:29:48 AM org.apache.jasper.compiler.TldLocationsCache tldScanJar 
INFO: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time. 
Jan 10, 2014 1:29:49 AM org.springframework.web.servlet.DispatcherServlet noHandlerFound 
WARNING: No mapping found for HTTP request with URI [/web-crud/webjars/jquery-ui/1.10.3/themes/base/jquery-ui.css] in DispatcherServlet with name 'dispatcher' 
Jan 10, 2014 1:29:49 AM org.springframework.web.servlet.DispatcherServlet noHandlerFound 
WARNING: No mapping found for HTTP request with URI [/web-crud/webjars/bootstrap/3.0.3/css/bootstrap-theme.min.css] in DispatcherServlet with name 'dispatcher' 
Jan 10, 2014 1:29:49 AM org.springframework.web.servlet.DispatcherServlet noHandlerFound 
WARNING: No mapping found for HTTP request with URI [/web-crud/webjars/bootstrap/3.0.3/css/bootstrap.min.css] in DispatcherServlet with name 'dispatcher' 

ответ

3

Это не выглядит, как вы добавили обработчик ресурсов для WebJars. См. WebJars Spring MVC docs для получения дополнительной информации.

+0

Спасибо @JamesWard, я снова начал проект и работал, но я не понимал, что в моем предыдущем проекте обработчик отсутствовал. – agusgambina

Смежные вопросы