├── .gitignore ├── src └── main │ ├── webapp │ ├── WEB-INF │ │ ├── .gitignore │ │ ├── faces-config.xml │ │ └── web.xml │ ├── layout.xhtml │ ├── viewBook.xhtml │ └── index.xhtml │ ├── resources │ ├── application.properties │ ├── import.sql │ └── books.json │ └── java │ └── com │ └── oakdalesoft │ └── bootfaces │ ├── persistence │ └── BookRepository.java │ ├── view │ ├── BookView.java │ └── BookModel.java │ ├── Initializer.java │ ├── FacesRewriteConfigurationProvider.java │ ├── service │ └── BookController.java │ ├── domain │ └── Book.java │ └── Application.java ├── .settings ├── org.eclipse.m2e.core.prefs ├── org.eclipse.core.resources.prefs ├── org.eclipse.wst.common.project.facet.core.prefs.xml ├── org.eclipse.wst.common.project.facet.core.xml └── org.eclipse.jdt.core.prefs ├── books.json ├── .project ├── README.md ├── pom.xml └── .classpath /.gitignore: -------------------------------------------------------------------------------- 1 | /target/ 2 | -------------------------------------------------------------------------------- /src/main/webapp/WEB-INF/.gitignore: -------------------------------------------------------------------------------- 1 | /classes/ 2 | -------------------------------------------------------------------------------- /.settings/org.eclipse.m2e.core.prefs: -------------------------------------------------------------------------------- 1 | activeProfiles= 2 | eclipse.preferences.version=1 3 | resolveWorkspaceProjects=true 4 | version=1 5 | -------------------------------------------------------------------------------- /.settings/org.eclipse.core.resources.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | encoding//src/main/java=UTF-8 3 | encoding//src/main/resources=UTF-8 4 | encoding//src/test/java=UTF-8 5 | encoding/=UTF-8 6 | -------------------------------------------------------------------------------- /src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | name=Alex 2 | server.port=9090 3 | servlet.container.maxThreads=513 4 | #spring.jpa.hibernate.ddl-auto=create-drop 5 | spring.datasource.url=jdbc:h2:./books 6 | init.json=books.json 7 | -------------------------------------------------------------------------------- /.settings/org.eclipse.wst.common.project.facet.core.prefs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.settings/org.eclipse.wst.common.project.facet.core.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/main/java/com/oakdalesoft/bootfaces/persistence/BookRepository.java: -------------------------------------------------------------------------------- 1 | package com.oakdalesoft.bootfaces.persistence; 2 | 3 | import com.oakdalesoft.bootfaces.domain.Book; 4 | import org.springframework.data.jpa.repository.JpaRepository; 5 | 6 | /** 7 | * Created by Alex on 07/03/2015. 8 | */ 9 | 10 | public interface BookRepository extends JpaRepository { 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/com/oakdalesoft/bootfaces/view/BookView.java: -------------------------------------------------------------------------------- 1 | package com.oakdalesoft.bootfaces.view; 2 | 3 | import com.oakdalesoft.bootfaces.domain.Book; 4 | import javax.faces.bean.ManagedBean; 5 | import javax.faces.bean.RequestScoped; 6 | 7 | /** 8 | * Created by Alex on 07/03/2015. 9 | */ 10 | 11 | @ManagedBean(name = "book", eager = true) 12 | @RequestScoped 13 | public class BookView extends Book { 14 | 15 | public BookView() { } 16 | } 17 | -------------------------------------------------------------------------------- /src/main/webapp/WEB-INF/faces-config.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | org.springframework.web.jsf.el.SpringBeanFacesELResolver 8 | 9 | -------------------------------------------------------------------------------- /src/main/resources/import.sql: -------------------------------------------------------------------------------- 1 | 2 | INSERT INTO Book (id, title, price, description, nbofpage, illustrations) VALUES (0, 'Functional Programming in Scala', 49.99, 'Functional Programming in Scala is a serious tutorial for programmers looking to learn FP and apply it to the everyday business of coding.', 301, false); 3 | 4 | INSERT INTO Book (id, title, price, description, nbofpage, illustrations) VALUES (1, 'Big Data Analytics Beyond Hadoop: Real-Time Applications with Storm, Spark, and More Hadoop Alternatives', 55.99, 'Master alternative Big Data technologies that can do what Hadoop can''t: real-time analytics and iterative machine learning', 240, true); 5 | 6 | 7 | -------------------------------------------------------------------------------- /books.json: -------------------------------------------------------------------------------- 1 | [{"_class":"com.oakdalesoft.bootfaces.domain.Book","id":0,"title":"Functional Programming in Scala","price":49.99,"description":"Functional Programming in Scala is a serious tutorial for programmers looking to learn FP and apply it to the everyday business of coding.","nbofpage":301,"illustrations":false},{"_class":"com.oakdalesoft.bootfaces.domain.Book","id":1,"title":"Big Data Analytics Beyond Hadoop: Real-Time Applications with Storm, Spark, and More Hadoop Alternatives","price":55.99,"description":"Master alternative Big Data technologies that can do what Hadoop can't: real-time analytics and iterative machine learning","nbofpage":240,"illustrations":true}] -------------------------------------------------------------------------------- /src/main/resources/books.json: -------------------------------------------------------------------------------- 1 | [{"_class":"com.oakdalesoft.bootfaces.domain.Book","id":0,"title":"Functional Programming in Scala","price":49.99,"description":"Functional Programming in Scala is a serious tutorial for programmers looking to learn FP and apply it to the everyday business of coding.","nbofpage":301,"illustrations":false},{"_class":"com.oakdalesoft.bootfaces.domain.Book","id":1,"title":"Big Data Analytics Beyond Hadoop: Real-Time Applications with Storm, Spark, and More Hadoop Alternatives","price":55.99,"description":"Master alternative Big Data technologies that can do what Hadoop can't: real-time analytics and iterative machine learning","nbofpage":240,"illustrations":true}] -------------------------------------------------------------------------------- /.settings/org.eclipse.jdt.core.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled 3 | org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate 4 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 5 | org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve 6 | org.eclipse.jdt.core.compiler.compliance=1.7 7 | org.eclipse.jdt.core.compiler.debug.lineNumber=generate 8 | org.eclipse.jdt.core.compiler.debug.localVariable=generate 9 | org.eclipse.jdt.core.compiler.debug.sourceFile=generate 10 | org.eclipse.jdt.core.compiler.problem.assertIdentifier=error 11 | org.eclipse.jdt.core.compiler.problem.enumIdentifier=error 12 | org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning 13 | org.eclipse.jdt.core.compiler.source=1.7 14 | -------------------------------------------------------------------------------- /src/main/java/com/oakdalesoft/bootfaces/Initializer.java: -------------------------------------------------------------------------------- 1 | package com.oakdalesoft.bootfaces; 2 | 3 | import org.springframework.boot.context.embedded.ServletContextInitializer; 4 | import org.springframework.context.annotation.Configuration; 5 | 6 | import javax.servlet.ServletContext; 7 | import javax.servlet.ServletException; 8 | 9 | /** 10 | * Created by Alex on 28/02/2015. 11 | */ 12 | 13 | @Configuration 14 | public class Initializer implements ServletContextInitializer { 15 | 16 | @Override 17 | public void onStartup(ServletContext servletContext) throws ServletException { 18 | System.err.println("------------------------------------"); 19 | servletContext.setInitParameter("primefaces.CLIENT_SIDE_VALIDATION", "true"); 20 | servletContext.setInitParameter("primefaces.THEME", "bootstrap"); 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /src/main/webapp/WEB-INF/web.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | Faces Servlet 9 | javax.faces.webapp.FacesServlet 10 | 1 11 | 12 | 13 | Faces Servlet 14 | *.jsf 15 | 16 | 17 | primefaces.CLIENT_SIDE_VALIDATION 18 | true 19 | 20 | 21 | -------------------------------------------------------------------------------- /src/main/java/com/oakdalesoft/bootfaces/FacesRewriteConfigurationProvider.java: -------------------------------------------------------------------------------- 1 | package com.oakdalesoft.bootfaces; 2 | 3 | import javax.servlet.ServletContext; 4 | 5 | import org.ocpsoft.rewrite.annotation.RewriteConfiguration; 6 | import org.ocpsoft.rewrite.config.Configuration; 7 | import org.ocpsoft.rewrite.config.ConfigurationBuilder; 8 | import org.ocpsoft.rewrite.servlet.config.HttpConfigurationProvider; 9 | import org.ocpsoft.rewrite.servlet.config.rule.Join; 10 | 11 | @RewriteConfiguration 12 | public class FacesRewriteConfigurationProvider extends HttpConfigurationProvider { 13 | 14 | @Override 15 | public int priority() 16 | { 17 | return 10; 18 | } 19 | 20 | @Override 21 | public Configuration getConfiguration(final ServletContext context) 22 | { 23 | return ConfigurationBuilder.begin() 24 | .addRule(Join.path("/").to("/index.jsf")) 25 | .addRule(Join.path("/book/{id}/").to("/viewBook.jsf")); 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | boot-faces 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.wst.common.project.facet.core.builder 10 | 11 | 12 | 13 | 14 | org.eclipse.jdt.core.javabuilder 15 | 16 | 17 | 18 | 19 | com.genuitec.eclipse.springframework.springbuilder 20 | 21 | 22 | 23 | 24 | org.eclipse.m2e.core.maven2Builder 25 | 26 | 27 | 28 | 29 | 30 | com.genuitec.eclipse.springframework.springnature 31 | org.eclipse.m2e.core.maven2Nature 32 | org.eclipse.jdt.core.javanature 33 | org.eclipse.wst.common.project.facet.core.nature 34 | 35 | 36 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # boot-faces 2 | ## Spring Boot, JSF Primefaces demo 3 | 4 | ### Purpose 5 | The purpose of this tutorial was to show how to combine Spring Boot with JSF and Primefaces in order to create a simple micro-service with an attractive front-end. 6 | 7 | There are other tutorials on the web that people have done but I wanted to demonstrate the official Spring way, particularly I wanted to show how easy and aesthetic it can be. 8 | 9 | ### Key Technologies 10 | 11 | This demo covers: 12 | * Spring Boot Autoconfiguration 13 | * Spring Data JPA 14 | * Spring Rest 15 | * Embedded Tomcat 16 | * Spring Actuator 17 | * JSF and Primefaces 18 | * Spring/JSF interop (SpringBeanFacesELResolver) 19 | * Jackson Repository Populators 20 | 21 | You can find more information about this demo on my website at: [Spring Boot with JSF/Primefaces](http://www.oakdalesoft.com/2015/03/spring-boot-with-jsfprimefaces/) 22 | 23 | --- 24 | 25 | ### Update 26 | 27 | > Added OcpSoft Rewrite to the project, this rewrites the JSF URL schema to look clean and modern without file extensions. Note that Omnifaces doesn't work with Spring Boot. -------------------------------------------------------------------------------- /src/main/java/com/oakdalesoft/bootfaces/service/BookController.java: -------------------------------------------------------------------------------- 1 | package com.oakdalesoft.bootfaces.service; 2 | 3 | import com.oakdalesoft.bootfaces.domain.Book; 4 | import com.oakdalesoft.bootfaces.persistence.BookRepository; 5 | 6 | import org.springframework.beans.factory.annotation.Autowired; 7 | import org.springframework.web.bind.annotation.PathVariable; 8 | import org.springframework.web.bind.annotation.RequestMapping; 9 | import org.springframework.web.bind.annotation.RequestMethod; 10 | import org.springframework.web.bind.annotation.ResponseBody; 11 | import org.springframework.web.bind.annotation.RestController; 12 | 13 | /** 14 | * Created by Alex on 18/03/2015. 15 | */ 16 | 17 | @RestController 18 | public class BookController { 19 | 20 | @Autowired 21 | private BookRepository bookRepository; 22 | 23 | @RequestMapping("/service/books") 24 | public @ResponseBody 25 | Iterable getAllBooks() { 26 | return this.bookRepository.findAll(); 27 | } 28 | 29 | @RequestMapping(value="/service/book/{id}", method=RequestMethod.GET) 30 | public @ResponseBody Book getBookById(@PathVariable Long id) { 31 | return this.bookRepository.findOne(id); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/main/webapp/layout.xhtml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 9 | 10 | 11 | <ui:insert name="title">Default title</ui:insert> 12 | 13 | 14 | 15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 | 25 | Default content 26 |
27 |
28 |
29 |
30 |

31 | 32 |
33 |
34 | -------------------------------------------------------------------------------- /src/main/webapp/viewBook.xhtml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | View a book 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /src/main/java/com/oakdalesoft/bootfaces/domain/Book.java: -------------------------------------------------------------------------------- 1 | package com.oakdalesoft.bootfaces.domain; 2 | 3 | import javax.persistence.*; 4 | 5 | /** 6 | * Created by Alex on 07/03/2015. 7 | */ 8 | 9 | @Entity 10 | @Table(schema = "books.public", name = "Book") 11 | public class Book { 12 | 13 | public Long getId() { 14 | return id; 15 | } 16 | 17 | public void setId(Long id) { 18 | this.id = id; 19 | } 20 | 21 | public String getTitle() { 22 | return title; 23 | } 24 | 25 | public void setTitle(String title) { 26 | this.title = title; 27 | } 28 | 29 | public Float getPrice() { 30 | return price; 31 | } 32 | 33 | public void setPrice(Float price) { 34 | this.price = price; 35 | } 36 | 37 | public String getDescription() { 38 | return description; 39 | } 40 | 41 | public void setDescription(String description) { 42 | this.description = description; 43 | } 44 | 45 | public Integer getnbofpage() { 46 | return nbofpage; 47 | } 48 | 49 | public void setnbofpage(Integer nbOfPage) { 50 | this.nbofpage = nbOfPage; 51 | } 52 | 53 | public Boolean getIllustrations() { 54 | return illustrations; 55 | } 56 | 57 | public void setIllustrations(Boolean illustrations) { 58 | this.illustrations = illustrations; 59 | } 60 | 61 | @Id 62 | @GeneratedValue(strategy=GenerationType.AUTO) 63 | private Long id; 64 | @Column(nullable = false) 65 | private String title; 66 | @Column(nullable = true) 67 | private Float price; 68 | @Column(nullable = true) 69 | private String description; 70 | @Column(nullable = true) 71 | private Integer nbofpage; 72 | @Column(nullable = true) 73 | private Boolean illustrations; 74 | 75 | } 76 | -------------------------------------------------------------------------------- /src/main/webapp/index.xhtml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 |

List of books

30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 |
45 |
46 | 47 |
48 | 49 | -------------------------------------------------------------------------------- /src/main/java/com/oakdalesoft/bootfaces/Application.java: -------------------------------------------------------------------------------- 1 | package com.oakdalesoft.bootfaces; 2 | 3 | import java.util.EnumSet; 4 | 5 | import org.ocpsoft.rewrite.servlet.RewriteFilter; 6 | import org.springframework.beans.factory.annotation.Value; 7 | import org.springframework.boot.SpringApplication; 8 | import org.springframework.boot.autoconfigure.EnableAutoConfiguration; 9 | import org.springframework.boot.builder.SpringApplicationBuilder; 10 | import org.springframework.boot.context.embedded.FilterRegistrationBean; 11 | import org.springframework.boot.context.embedded.ServletRegistrationBean; 12 | import org.springframework.boot.context.web.SpringBootServletInitializer; 13 | import org.springframework.context.annotation.Bean; 14 | import org.springframework.context.annotation.ComponentScan; 15 | import org.springframework.core.io.ClassPathResource; 16 | import org.springframework.core.io.PathResource; 17 | import org.springframework.core.io.Resource; 18 | import org.springframework.data.repository.init.Jackson2RepositoryPopulatorFactoryBean; 19 | 20 | import javax.faces.webapp.FacesServlet; 21 | import javax.servlet.DispatcherType; 22 | 23 | /** 24 | * Created by Alex on 28/02/2015. 25 | */ 26 | 27 | @EnableAutoConfiguration 28 | @ComponentScan({"com.oakdalesoft.bootfaces"}) 29 | public class Application extends SpringBootServletInitializer { 30 | 31 | @Value("${init.json}") 32 | private String init; 33 | 34 | public static void main(String[] args) { 35 | SpringApplication.run(Application.class, args); 36 | } 37 | 38 | @Override 39 | protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { 40 | return application.sources(Application.class, Initializer.class); 41 | } 42 | 43 | @Bean 44 | public ServletRegistrationBean servletRegistrationBean() { 45 | FacesServlet servlet = new FacesServlet(); 46 | ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(servlet, "*.jsf"); 47 | return servletRegistrationBean; 48 | } 49 | 50 | @Bean 51 | public FilterRegistrationBean rewriteFilter() { 52 | FilterRegistrationBean rwFilter = new FilterRegistrationBean(new RewriteFilter()); 53 | rwFilter.setDispatcherTypes(EnumSet.of(DispatcherType.FORWARD, DispatcherType.REQUEST, 54 | DispatcherType.ASYNC, DispatcherType.ERROR)); 55 | rwFilter.addUrlPatterns("/*"); 56 | return rwFilter; 57 | } 58 | 59 | @Bean 60 | public Jackson2RepositoryPopulatorFactoryBean repositoryPopulator() { 61 | Resource sourceData; 62 | Jackson2RepositoryPopulatorFactoryBean factory; 63 | try { 64 | sourceData = new PathResource(init); 65 | if(!sourceData.exists()) 66 | sourceData = new ClassPathResource(init); 67 | factory = new Jackson2RepositoryPopulatorFactoryBean(); 68 | factory.setResources(new Resource[] { sourceData }); 69 | } catch (Exception e) { 70 | return null; 71 | } 72 | 73 | return factory; 74 | } 75 | 76 | } 77 | -------------------------------------------------------------------------------- /src/main/java/com/oakdalesoft/bootfaces/view/BookModel.java: -------------------------------------------------------------------------------- 1 | package com.oakdalesoft.bootfaces.view; 2 | 3 | import com.oakdalesoft.bootfaces.domain.Book; 4 | import com.oakdalesoft.bootfaces.persistence.BookRepository; 5 | 6 | import javax.faces.application.FacesMessage; 7 | import javax.faces.bean.ManagedBean; 8 | import javax.faces.bean.ManagedProperty; 9 | import javax.faces.bean.RequestScoped; 10 | import javax.faces.context.FacesContext; 11 | import java.util.ArrayList; 12 | import java.util.List; 13 | 14 | /** 15 | * Created by Alex on 07/03/2015. 16 | */ 17 | @ManagedBean(name = "model", eager = true) 18 | @RequestScoped 19 | public class BookModel { 20 | 21 | public void setBook(BookView book) { 22 | this.book = book; 23 | } 24 | 25 | public BookView getBook() { 26 | return book; 27 | } 28 | 29 | @ManagedProperty(value = "#{book}") 30 | private BookView book; 31 | 32 | public BookRepository getBookRepository() { 33 | return bookRepository; 34 | } 35 | 36 | public void setBookRepository(BookRepository bookRepository) { 37 | this.bookRepository = bookRepository; 38 | } 39 | 40 | @ManagedProperty(value = "#{bookRepository}") 41 | BookRepository bookRepository; 42 | 43 | public String doCreateBook() { 44 | Book created = new Book(); 45 | created.setId(this.book.getId()); 46 | created.setTitle(this.book.getTitle()); 47 | created.setPrice(this.book.getPrice()); 48 | created.setnbofpage(this.book.getnbofpage()); 49 | created.setDescription(this.book.getDescription()); 50 | Book newBook = this.bookRepository.save(created); 51 | 52 | FacesContext.getCurrentInstance().addMessage("errors", 53 | new FacesMessage(FacesMessage.SEVERITY_INFO, "Book created", 54 | "The book " + created.getTitle() + " has been created with id=" + newBook.getId())); 55 | 56 | this.book.setTitle(""); 57 | this.book.setPrice(null); 58 | this.book.setDescription(""); 59 | this.book.setIllustrations(false); 60 | this.book.setnbofpage(null); 61 | 62 | return "index.xhtml"; 63 | } 64 | 65 | public void doFindBookById() { 66 | Book found = bookRepository.findOne(this.book.getId()); 67 | this.book.setId(found.getId()); 68 | this.book.setTitle(found.getTitle()); 69 | this.book.setPrice(found.getPrice()); 70 | this.book.setnbofpage(found.getnbofpage()); 71 | this.book.setDescription(found.getDescription()); 72 | this.book.setDescription(found.getDescription()); 73 | } 74 | 75 | public List findAllBooks() { 76 | List books = new ArrayList(); 77 | for(Book entity : this.bookRepository.findAll()) { 78 | BookView view = new BookView(); 79 | view.setId(entity.getId()); 80 | view.setTitle(entity.getTitle()); 81 | view.setPrice(entity.getPrice()); 82 | view.setnbofpage(entity.getnbofpage()); 83 | view.setDescription(entity.getDescription()); 84 | view.setDescription(entity.getDescription()); 85 | books.add(view); 86 | } 87 | return books; 88 | } 89 | 90 | } 91 | -------------------------------------------------------------------------------- /pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | com.oakdalesoft 8 | boot-faces 9 | 1.0-SNAPSHOT 10 | 11 | 12 | 13 | org.springframework.boot 14 | spring-boot-starter-parent 15 | 1.2.2.RELEASE 16 | 17 | 18 | 19 | 20 | 21 | org.springframework.boot 22 | spring-boot-starter-web 23 | 24 | 25 | org.springframework.boot 26 | spring-boot-starter-aop 27 | compile 28 | 29 | 30 | org.apache.myfaces.core 31 | myfaces-impl 32 | 2.2.6 33 | compile 34 | 35 | 36 | org.apache.myfaces.core 37 | myfaces-api 38 | 2.2.6 39 | compile 40 | 41 | 42 | org.springframework.boot 43 | spring-boot-starter-data-jpa 44 | 45 | 46 | com.h2database 47 | h2 48 | runtime 49 | 50 | 51 | org.springframework.boot 52 | spring-boot-starter-actuator 53 | 54 | 55 | org.apache.tomcat.embed 56 | tomcat-embed-core 57 | compile 58 | 59 | 60 | org.apache.tomcat.embed 61 | tomcat-embed-logging-juli 62 | compile 63 | 64 | 65 | org.apache.tomcat.embed 66 | tomcat-embed-jasper 67 | compile 68 | 69 | 70 | org.hibernate 71 | hibernate-validator 72 | 73 | 74 | javax.validation 75 | validation-api 76 | 1.1.0.Final 77 | 78 | 79 | org.primefaces 80 | primefaces 81 | 5.1 82 | compile 83 | 84 | 85 | org.primefaces.extensions 86 | all-themes 87 | 1.0.8 88 | 89 | 90 | org.ocpsoft.rewrite 91 | rewrite-servlet 92 | 2.0.12.Final 93 | 94 | 95 | 96 | 97 | 98 | src/main/webapp/WEB-INF/classes 99 | 100 | 101 | org.springframework.boot 102 | spring-boot-maven-plugin 103 | 104 | 105 | 106 | -------------------------------------------------------------------------------- /.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | --------------------------------------------------------------------------------