SpringBoot- service, controller, dao with JSF
This commit is contained in:
		
							parent
							
								
									33aa52ac94
								
							
						
					
					
						commit
						f96b4ed33b
					
				| @ -21,6 +21,32 @@ | |||||||
| 			<groupId>org.springframework.boot</groupId> | 			<groupId>org.springframework.boot</groupId> | ||||||
| 			<artifactId>spring-boot-starter-web</artifactId> | 			<artifactId>spring-boot-starter-web</artifactId> | ||||||
| 		</dependency> | 		</dependency> | ||||||
|  | 		<!--JSF--> | ||||||
|  | 		<dependency> | ||||||
|  | 			<groupId>com.sun.faces</groupId> | ||||||
|  | 			<artifactId>jsf-api</artifactId> | ||||||
|  | 			<version>2.2.9</version> | ||||||
|  | 		</dependency> | ||||||
|  | 		<dependency> | ||||||
|  | 			<groupId>org.apache.tomcat.embed</groupId> | ||||||
|  | 			<artifactId>tomcat-embed-jasper</artifactId> | ||||||
|  | 		</dependency> | ||||||
|  | 		<dependency> | ||||||
|  | 			<groupId>javax.faces</groupId> | ||||||
|  | 			<artifactId>javax.faces-api</artifactId> | ||||||
|  | 			<version>2.1</version> | ||||||
|  | 		</dependency> | ||||||
|  | 		<dependency> | ||||||
|  | 			<groupId>javax.servlet</groupId> | ||||||
|  | 			<artifactId>jstl</artifactId> | ||||||
|  | 			<version>1.2</version> | ||||||
|  | 		</dependency> | ||||||
|  | 		<dependency> | ||||||
|  | 			<groupId>com.sun.faces</groupId> | ||||||
|  | 			<artifactId>jsf-impl</artifactId> | ||||||
|  | 			<version>2.2.8-02</version> | ||||||
|  | 		</dependency> | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| 		<dependency> | 		<dependency> | ||||||
| 			<groupId>org.springframework.boot</groupId> | 			<groupId>org.springframework.boot</groupId> | ||||||
|  | |||||||
| @ -0,0 +1,31 @@ | |||||||
|  | package com.baeldung.springbootmvc.jsfapplication; | ||||||
|  | 
 | ||||||
|  | import javax.faces.webapp.FacesServlet; | ||||||
|  | 
 | ||||||
|  | import org.springframework.boot.SpringApplication; | ||||||
|  | import org.springframework.boot.autoconfigure.SpringBootApplication; | ||||||
|  | import org.springframework.boot.web.servlet.ServletRegistrationBean; | ||||||
|  | import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; | ||||||
|  | import org.springframework.context.annotation.Bean; | ||||||
|  | import org.springframework.context.annotation.ComponentScan; | ||||||
|  | 
 | ||||||
|  | import com.baeldung.springbootmvc.jsfapplication.controller.JsfController; | ||||||
|  | import com.baeldung.springbootmvc.jsfapplication.model.TodoDao; | ||||||
|  | import com.baeldung.springbootmvc.jsfapplication.service.TodoService; | ||||||
|  | 
 | ||||||
|  | @SpringBootApplication | ||||||
|  | @ComponentScan(basePackageClasses = { JsfController.class, TodoDao.class, TodoService.class }) | ||||||
|  | public class JsfApplication extends SpringBootServletInitializer { | ||||||
|  | 
 | ||||||
|  |     public static void main(String[] args) { | ||||||
|  |         SpringApplication.run(JsfApplication.class, args); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Bean | ||||||
|  |     public ServletRegistrationBean servletRegistrationBean() { | ||||||
|  |         FacesServlet servlet = new FacesServlet(); | ||||||
|  |         ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(servlet, "*.jsf"); | ||||||
|  |         return servletRegistrationBean; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  | } | ||||||
| @ -0,0 +1,19 @@ | |||||||
|  | package com.baeldung.springbootmvc.jsfapplication.controller; | ||||||
|  | 
 | ||||||
|  | import org.springframework.context.annotation.Scope; | ||||||
|  | import org.springframework.stereotype.Component; | ||||||
|  | 
 | ||||||
|  | @Scope(value = "session") | ||||||
|  | @Component(value = "jsfController") | ||||||
|  | public class JsfController { | ||||||
|  | 
 | ||||||
|  |     public String loadTodoPage() { | ||||||
|  |         checkPermission(); | ||||||
|  |         return "/todo.xhtml"; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     private void checkPermission() { | ||||||
|  |         // Details omitted | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  | } | ||||||
| @ -0,0 +1,17 @@ | |||||||
|  | package com.baeldung.springbootmvc.jsfapplication.model; | ||||||
|  | 
 | ||||||
|  | import java.util.Collection; | ||||||
|  | import java.util.Optional; | ||||||
|  | 
 | ||||||
|  | public interface Dao<T> { | ||||||
|  | 
 | ||||||
|  |     Optional<T> get(int id); | ||||||
|  | 
 | ||||||
|  |     Collection<T> getAll(); | ||||||
|  | 
 | ||||||
|  |     int save(T t); | ||||||
|  | 
 | ||||||
|  |     void update(T t); | ||||||
|  | 
 | ||||||
|  |     void delete(T t); | ||||||
|  | } | ||||||
| @ -0,0 +1,32 @@ | |||||||
|  | package com.baeldung.springbootmvc.jsfapplication.model; | ||||||
|  | 
 | ||||||
|  | public class Todo { | ||||||
|  | 
 | ||||||
|  |     private int id; | ||||||
|  |     private String message; | ||||||
|  |     private int priority; | ||||||
|  | 	 | ||||||
|  | 	public int getId() { | ||||||
|  | 		return id; | ||||||
|  | 	} | ||||||
|  | 	 | ||||||
|  | 	public void setId(int id) { | ||||||
|  | 		this.id = id; | ||||||
|  | 	} | ||||||
|  | 	 | ||||||
|  | 	public String getMessage() { | ||||||
|  |         return message; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setMessage(String message) { | ||||||
|  |         this.message = message; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public int getPriority() { | ||||||
|  |         return priority; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setPriority(int priority) { | ||||||
|  |         this.priority = priority; | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -0,0 +1,48 @@ | |||||||
|  | package com.baeldung.springbootmvc.jsfapplication.model; | ||||||
|  | 
 | ||||||
|  | import java.util.ArrayList; | ||||||
|  | import java.util.Collection; | ||||||
|  | import java.util.Collections; | ||||||
|  | import java.util.List; | ||||||
|  | import java.util.Objects; | ||||||
|  | import java.util.Optional; | ||||||
|  | import java.util.stream.Collectors; | ||||||
|  | 
 | ||||||
|  | import org.springframework.stereotype.Component; | ||||||
|  | 
 | ||||||
|  | @Component | ||||||
|  | public class TodoDao implements Dao<Todo> { | ||||||
|  | 
 | ||||||
|  |     private List<Todo> todoList = new ArrayList<>(); | ||||||
|  |      | ||||||
|  |     @Override | ||||||
|  |     public Optional<Todo> get(int id) { | ||||||
|  |         return Optional.ofNullable(todoList.get(id)); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Override | ||||||
|  |     public Collection<Todo> getAll() { | ||||||
|  |         return Collections.unmodifiableCollection(todoList.stream() | ||||||
|  |             .filter(Objects::nonNull) | ||||||
|  |             .collect(Collectors.toList())); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Override | ||||||
|  |     public int save(Todo todo) { | ||||||
|  |         todoList.add(todo); | ||||||
|  |         int index = todoList.size() - 1; | ||||||
|  |         todo.setId(index); | ||||||
|  |         return index; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Override | ||||||
|  |     public void update(Todo todo) { | ||||||
|  |         todoList.set(todo.getId(), todo); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Override | ||||||
|  |     public void delete(Todo todo) { | ||||||
|  |         todoList.set(todo.getId(), null); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  | } | ||||||
| @ -0,0 +1,50 @@ | |||||||
|  | package com.baeldung.springbootmvc.jsfapplication.service; | ||||||
|  | 
 | ||||||
|  | import java.util.Collection; | ||||||
|  | import java.util.Comparator; | ||||||
|  | import java.util.stream.Collectors; | ||||||
|  | 
 | ||||||
|  | import org.springframework.beans.factory.annotation.Autowired; | ||||||
|  | import org.springframework.context.annotation.Scope; | ||||||
|  | import org.springframework.stereotype.Component; | ||||||
|  | 
 | ||||||
|  | import com.baeldung.springbootmvc.jsfapplication.model.Dao; | ||||||
|  | import com.baeldung.springbootmvc.jsfapplication.model.Todo; | ||||||
|  | 
 | ||||||
|  | @Scope(value = "session") | ||||||
|  | @Component(value = "todoService") | ||||||
|  | public class TodoService { | ||||||
|  | 
 | ||||||
|  |     @Autowired | ||||||
|  |     private Dao<Todo> todoDao; | ||||||
|  |     private Todo todo = new Todo(); | ||||||
|  | 
 | ||||||
|  |     public void save() { | ||||||
|  |         todoDao.save(todo); | ||||||
|  |         todo = new Todo(); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public Collection<Todo> getAllTodo() { | ||||||
|  |         return todoDao.getAll(); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public Collection<Todo> getAllTodoSortedByPriority() { | ||||||
|  |         return todoDao.getAll() | ||||||
|  |             .stream() | ||||||
|  |             .sorted(Comparator.comparingInt(Todo::getId)) | ||||||
|  |             .collect(Collectors.toList()); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public int saveTodo(Todo todo) { | ||||||
|  |         validate(todo); | ||||||
|  |         return todoDao.save(todo); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     private void validate(Todo todo) { | ||||||
|  |         // Details omitted | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public Todo getTodo() { | ||||||
|  |         return todo; | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										9
									
								
								spring-boot-mvc/src/main/webapp/WEB-INF/faces-config.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								spring-boot-mvc/src/main/webapp/WEB-INF/faces-config.xml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,9 @@ | |||||||
|  | <?xml version="1.0" encoding="UTF-8"?> | ||||||
|  | <faces-config xmlns="http://xmlns.jcp.org/xml/ns/javaee" | ||||||
|  | 	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||||||
|  | 	xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd" | ||||||
|  | 	version="2.2"> | ||||||
|  | 	<application> | ||||||
|  | 		<el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver> | ||||||
|  | 	</application> | ||||||
|  | </faces-config> | ||||||
							
								
								
									
										21
									
								
								spring-boot-mvc/src/main/webapp/WEB-INF/web.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								spring-boot-mvc/src/main/webapp/WEB-INF/web.xml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,21 @@ | |||||||
|  | <?xml version="1.0" encoding="UTF-8"?> | ||||||
|  | <web-app xmlns="http://java.sun.com/xml/ns/javaee" | ||||||
|  | 	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||||||
|  | 	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee | ||||||
|  |           http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" | ||||||
|  | 	version="2.5"> | ||||||
|  | 
 | ||||||
|  | 	<servlet> | ||||||
|  | 		<servlet-name>Faces Servlet</servlet-name> | ||||||
|  | 		<servlet-class>javax.faces.webapp.FacesServlet</servlet-class> | ||||||
|  | 		<load-on-startup>1</load-on-startup> | ||||||
|  | 	</servlet> | ||||||
|  | 	<servlet-mapping> | ||||||
|  | 		<servlet-name>Faces Servlet</servlet-name> | ||||||
|  | 		<url-pattern>*.jsf</url-pattern> | ||||||
|  | 	</servlet-mapping> | ||||||
|  | 	<context-param> | ||||||
|  | 		<param-name>com.sun.faces.forceLoadConfiguration</param-name> | ||||||
|  | 		<param-value>true</param-value> | ||||||
|  | 	</context-param> | ||||||
|  | </web-app> | ||||||
							
								
								
									
										20
									
								
								spring-boot-mvc/src/main/webapp/index.xhtml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								spring-boot-mvc/src/main/webapp/index.xhtml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,20 @@ | |||||||
|  | <f:view xmlns="http://www.w3c.org/1999/xhtml" | ||||||
|  |         xmlns:f="http://java.sun.com/jsf/core" | ||||||
|  |         xmlns:h="http://java.sun.com/jsf/html"> | ||||||
|  |     <h:head> | ||||||
|  |         <meta charset="utf-8"/> | ||||||
|  |         <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/> | ||||||
|  |         <title>TO-DO application</title> | ||||||
|  |     </h:head> | ||||||
|  |     <h:body> | ||||||
|  |         <div> | ||||||
|  |             <p>Welcome in the TO-DO application!</p> | ||||||
|  |             <p style="height:50px"> | ||||||
|  |                 This is a static message rendered from xhtml. | ||||||
|  |                 <h:form> | ||||||
|  |                     <h:commandButton value="Load To-do page!" action="#{jsfController.loadTodoPage}" /> | ||||||
|  |                 </h:form> | ||||||
|  |             </p> | ||||||
|  |         </div> | ||||||
|  |     </h:body> | ||||||
|  | </f:view> | ||||||
							
								
								
									
										38
									
								
								spring-boot-mvc/src/main/webapp/todo.xhtml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								spring-boot-mvc/src/main/webapp/todo.xhtml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,38 @@ | |||||||
|  | <f:view xmlns="http://www.w3c.org/1999/xhtml" | ||||||
|  |         xmlns:f="http://java.sun.com/jsf/core" | ||||||
|  |         xmlns:h="http://java.sun.com/jsf/html"> | ||||||
|  |     <h:head> | ||||||
|  |         <meta charset="utf-8"/> | ||||||
|  |         <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/> | ||||||
|  |         <title>TO-DO application</title> | ||||||
|  |     </h:head> | ||||||
|  |     <h:body> | ||||||
|  |         <div> | ||||||
|  |             <div> | ||||||
|  |                 List of TO-DO items | ||||||
|  |             </div> | ||||||
|  |             <h:dataTable value="#{todoService.allTodo}" var="item"> | ||||||
|  |                 <h:column> | ||||||
|  |                     <f:facet name="header"> Message</f:facet> | ||||||
|  |                     #{item.message} | ||||||
|  |                 </h:column> | ||||||
|  |                 <h:column> | ||||||
|  |                     <f:facet name="header"> Priority</f:facet> | ||||||
|  |                     #{item.priority} | ||||||
|  |                 </h:column> | ||||||
|  |             </h:dataTable> | ||||||
|  |         </div> | ||||||
|  |         <div> | ||||||
|  |             <div> | ||||||
|  |                 Add new to-do item: | ||||||
|  |             </div> | ||||||
|  |             <h:form> | ||||||
|  |                 <h:outputLabel for="message" value="Message: "/> | ||||||
|  |                 <h:inputText id="message" value="#{todoService.todo.message}"/> | ||||||
|  |                 <h:outputLabel for="priority" value="Priority: "/> | ||||||
|  |                 <h:inputText id="priority" value="#{todoService.todo.priority}" converterMessage="Please enter digits only."/> | ||||||
|  |                 <h:commandButton value="Save" action="#{todoService.save}"/> | ||||||
|  |             </h:form> | ||||||
|  |         </div> | ||||||
|  |     </h:body> | ||||||
|  | </f:view> | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user