Merge pull request #8854 from marius-munteanu/master
[BAEL-3011] Accesing Spring MVC Data from Thymeleaf
This commit is contained in:
		
						commit
						0789662084
					
				| @ -0,0 +1,14 @@ | |||||||
|  | package com.baeldung.thymeleaf.mvcdata; | ||||||
|  | 
 | ||||||
|  | import org.springframework.context.annotation.Bean; | ||||||
|  | import org.springframework.context.annotation.Configuration; | ||||||
|  | 
 | ||||||
|  | import com.baeldung.thymeleaf.mvcdata.repository.EmailData; | ||||||
|  | 
 | ||||||
|  | @Configuration | ||||||
|  | public class BeanConfig { | ||||||
|  |     @Bean | ||||||
|  |     public EmailData emailData() { | ||||||
|  |         return new EmailData(); | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -0,0 +1,63 @@ | |||||||
|  | package com.baeldung.thymeleaf.mvcdata; | ||||||
|  | 
 | ||||||
|  | import javax.servlet.ServletContext; | ||||||
|  | import javax.servlet.http.HttpSession; | ||||||
|  | 
 | ||||||
|  | import org.springframework.stereotype.Controller; | ||||||
|  | import org.springframework.ui.Model; | ||||||
|  | import org.springframework.web.bind.annotation.GetMapping; | ||||||
|  | import org.springframework.web.bind.annotation.ModelAttribute; | ||||||
|  | import org.springframework.web.bind.annotation.RequestParam; | ||||||
|  | 
 | ||||||
|  | import com.baeldung.thymeleaf.mvcdata.repository.EmailData; | ||||||
|  | 
 | ||||||
|  | @Controller | ||||||
|  | public class EmailController { | ||||||
|  |     private EmailData emailData = new EmailData(); | ||||||
|  |     private ServletContext servletContext; | ||||||
|  | 
 | ||||||
|  |     public EmailController(ServletContext servletContext) { | ||||||
|  |         this.servletContext = servletContext; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @GetMapping(value = "/email/modelattributes") | ||||||
|  |     public String emailModel(Model model) { | ||||||
|  |         model.addAttribute("emaildata", emailData); | ||||||
|  |         return "mvcdata/email-model-attributes"; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @ModelAttribute("emailModelAttribute") | ||||||
|  |     EmailData emailModelAttribute() { | ||||||
|  |         return emailData; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @GetMapping(value = "/email/requestparameters") | ||||||
|  |     public String emailRequestParameters( | ||||||
|  |             @RequestParam(value = "emailsubject") String emailSubject, | ||||||
|  |             @RequestParam(value = "emailcontent") String emailContent, | ||||||
|  |             @RequestParam(value = "emailaddress") String emailAddress1, | ||||||
|  |             @RequestParam(value = "emailaddress") String emailAddress2, | ||||||
|  |             @RequestParam(value = "emaillocale") String emailLocale) { | ||||||
|  |         return "mvcdata/email-request-parameters"; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @GetMapping("/email/sessionattributes") | ||||||
|  |     public String emailSessionAttributes(HttpSession httpSession) { | ||||||
|  |         httpSession.setAttribute("emaildata", emailData); | ||||||
|  |         return "mvcdata/email-session-attributes"; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @GetMapping("/email/servletcontext") | ||||||
|  |     public String emailServletContext() { | ||||||
|  |         servletContext.setAttribute("emailsubject", emailData.getEmailSubject()); | ||||||
|  |         servletContext.setAttribute("emailcontent", emailData.getEmailBody()); | ||||||
|  |         servletContext.setAttribute("emailaddress", emailData.getEmailAddress1()); | ||||||
|  |         servletContext.setAttribute("emaillocale", emailData.getEmailLocale()); | ||||||
|  |         return "mvcdata/email-servlet-context"; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @GetMapping("/email/beandata") | ||||||
|  |     public String emailBeanData() { | ||||||
|  |         return "mvcdata/email-bean-data"; | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -0,0 +1,48 @@ | |||||||
|  | package com.baeldung.thymeleaf.mvcdata.repository; | ||||||
|  | 
 | ||||||
|  | import java.io.Serializable; | ||||||
|  | import java.util.ArrayList; | ||||||
|  | import java.util.List; | ||||||
|  | 
 | ||||||
|  | public class EmailData implements Serializable { | ||||||
|  |     private String emailSubject; | ||||||
|  |     private String emailBody; | ||||||
|  |     private String emailLocale; | ||||||
|  |     private String emailAddress1; | ||||||
|  |     private String emailAddress2; | ||||||
|  | 
 | ||||||
|  |     public EmailData() { | ||||||
|  |         this.emailSubject = "You have received a new message"; | ||||||
|  |         this.emailBody = "Good morning !"; | ||||||
|  |         this.emailLocale = "en-US"; | ||||||
|  |         this.emailAddress1 = "jhon.doe@example.com"; | ||||||
|  |         this.emailAddress2 = "mark.jakob@example.com"; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getEmailSubject() { | ||||||
|  |         return this.emailSubject; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getEmailBody() { | ||||||
|  |         return this.emailBody; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getEmailLocale() { | ||||||
|  |         return this.emailLocale; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getEmailAddress1() { | ||||||
|  |         return this.emailAddress1; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getEmailAddress2() { | ||||||
|  |         return this.emailAddress2; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public List<String> getEmailAddresses() { | ||||||
|  |         List<String> emailAddresses = new ArrayList<>(); | ||||||
|  |         emailAddresses.add(getEmailAddress1()); | ||||||
|  |         emailAddresses.add(getEmailAddress2()); | ||||||
|  |         return emailAddresses; | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -0,0 +1,14 @@ | |||||||
|  | <!DOCTYPE html> | ||||||
|  | <html xmlns="http://www.w3.org/1999/xhtml" | ||||||
|  |   xmlns:th="http://www.thymeleaf.org"> | ||||||
|  |     <body> | ||||||
|  |         <h1>Subject</h1> | ||||||
|  |         <p th:text="${@emailData.emailSubject}">Subject</p> | ||||||
|  |         <h1>Content</h1> | ||||||
|  |         <p th:text="${@emailData.emailBody}">Body</p> | ||||||
|  |         <h1>Email address</h1> | ||||||
|  |         <p th:text="${@emailData.emailAddress1}">Email address</p> | ||||||
|  |         <h1>Language</h1> | ||||||
|  |         <p th:text="${@emailData.emailLocale}">Language</p> | ||||||
|  |     </body> | ||||||
|  | </html> | ||||||
| @ -0,0 +1,16 @@ | |||||||
|  | <!DOCTYPE html> | ||||||
|  | <html xmlns="http://www.w3.org/1999/xhtml" | ||||||
|  |   xmlns:th="http://www.thymeleaf.org"> | ||||||
|  |     <body> | ||||||
|  |         <h1>Subject</h1> | ||||||
|  |         <p th:text="${emaildata.emailSubject}">Subject</p> | ||||||
|  |         <h1>Content</h1> | ||||||
|  |         <p th:text="${emaildata.emailBody}"></p> | ||||||
|  |         <h1>Email addresses</h1> | ||||||
|  |         <p th:each="emailAddress : ${emailModelAttribute.getEmailAddresses()}"> | ||||||
|  |           <span th:text="${emailAddress}"></span> | ||||||
|  |         </p> | ||||||
|  |         <h1>Language</h1> | ||||||
|  |         <p th:text="${emaildata.emailLocale}"></p> | ||||||
|  |     </body> | ||||||
|  | </html> | ||||||
| @ -0,0 +1,20 @@ | |||||||
|  | <!DOCTYPE html> | ||||||
|  | <html xmlns="http://www.w3.org/1999/xhtml" | ||||||
|  |   xmlns:th="http://www.thymeleaf.org"> | ||||||
|  |     <body> | ||||||
|  |         <h1>Subject</h1> | ||||||
|  |         <p th:text="${param.emailsubject}">Subject</p> | ||||||
|  |         <h1>Content</h1> | ||||||
|  |         <p th:text="${param.emailcontent}"></p> | ||||||
|  |         <h1>Email addresses</h1> | ||||||
|  |         <p th:each="emailaddress : ${param.emailaddress}"> | ||||||
|  |           <span th:text="${emailaddress}"></span> | ||||||
|  |         </p> | ||||||
|  |         <h1>Email address 1</h1> | ||||||
|  |         <p th:text="${param.emailaddress[0]}"></p> | ||||||
|  |         <h1>Email address 2</h1> | ||||||
|  |         <p th:text="${param.emailaddress[1]}"></p> | ||||||
|  |         <h1>Language</h1> | ||||||
|  |         <p th:text="${param.emaillocale}"></p> | ||||||
|  |     </body> | ||||||
|  | </html> | ||||||
| @ -0,0 +1,14 @@ | |||||||
|  | <!DOCTYPE html> | ||||||
|  | <html xmlns="http://www.w3.org/1999/xhtml" | ||||||
|  |   xmlns:th="http://www.thymeleaf.org"> | ||||||
|  |     <body> | ||||||
|  |         <h1>Subject</h1> | ||||||
|  |         <p th:text="${#servletContext.getAttribute('emailsubject')}"></p> | ||||||
|  |         <h1>Content</h1> | ||||||
|  |         <p th:text="${#servletContext.getAttribute('emailcontent')}"></p> | ||||||
|  |         <h1>Email address</h1> | ||||||
|  |         <p th:text="${#servletContext.getAttribute('emailaddress')}"></p> | ||||||
|  |         <h1>Language</h1> | ||||||
|  |         <p th:text="${#servletContext.getAttribute('emaillocale')}"></p> | ||||||
|  |     </body> | ||||||
|  | </html> | ||||||
| @ -0,0 +1,14 @@ | |||||||
|  | <!DOCTYPE html> | ||||||
|  | <html xmlns="http://www.w3.org/1999/xhtml" | ||||||
|  |   xmlns:th="http://www.thymeleaf.org"> | ||||||
|  |     <body> | ||||||
|  |         <h1>Subject</h1> | ||||||
|  |         <p th:text="${session.emaildata.emailSubject}"></p> | ||||||
|  |         <h1>Content</h1> | ||||||
|  |         <p th:text="${session.emaildata.emailBody}"></p> | ||||||
|  |         <h1>Email address</h1> | ||||||
|  |         <p th:text="${session.emaildata.emailAddress1}"></p> | ||||||
|  |         <h1>Language</h1> | ||||||
|  |         <p th:text="${#session.getAttribute('emaillocale')}"></p> | ||||||
|  |     </body> | ||||||
|  | </html> | ||||||
| @ -0,0 +1,72 @@ | |||||||
|  | package com.baeldung.thymeleaf.mvcdata; | ||||||
|  | 
 | ||||||
|  | import static org.hamcrest.CoreMatchers.containsString; | ||||||
|  | import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; | ||||||
|  | import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; | ||||||
|  | 
 | ||||||
|  | import org.junit.Test; | ||||||
|  | import org.junit.runner.RunWith; | ||||||
|  | import org.springframework.beans.factory.annotation.Autowired; | ||||||
|  | import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; | ||||||
|  | import org.springframework.boot.test.context.SpringBootTest; | ||||||
|  | import org.springframework.test.context.junit4.SpringRunner; | ||||||
|  | import org.springframework.test.web.servlet.MockMvc; | ||||||
|  | import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; | ||||||
|  | import org.springframework.util.LinkedMultiValueMap; | ||||||
|  | import org.springframework.util.MultiValueMap; | ||||||
|  | 
 | ||||||
|  | import com.baeldung.thymeleaf.mvcdata.repository.EmailData; | ||||||
|  | 
 | ||||||
|  | @RunWith(SpringRunner.class) | ||||||
|  | @SpringBootTest | ||||||
|  | @AutoConfigureMockMvc(printOnlyOnFailure = false) | ||||||
|  | public class EmailControllerUnitTest { | ||||||
|  | 
 | ||||||
|  |     EmailData emailData = new EmailData(); | ||||||
|  | 
 | ||||||
|  |     @Autowired | ||||||
|  |     private MockMvc mockMvc; | ||||||
|  | 
 | ||||||
|  |     @Test | ||||||
|  |     public void whenCallModelAttributes_thenReturnEmailData() throws Exception { | ||||||
|  |         mockMvc.perform(MockMvcRequestBuilders.get("/email/modelattributes")) | ||||||
|  |                 .andExpect(status().isOk()) | ||||||
|  |                 .andExpect(content().string(containsString("You have received a new message"))); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Test | ||||||
|  |     public void whenCallRequestParameters_thenReturnEmailData() throws Exception { | ||||||
|  |         MultiValueMap<String, String> params = new LinkedMultiValueMap<>(); | ||||||
|  |         params.add("emailsubject", emailData.getEmailSubject()); | ||||||
|  |         params.add("emailcontent", emailData.getEmailBody()); | ||||||
|  |         params.add("emailaddress", emailData.getEmailAddress1()); | ||||||
|  |         params.add("emailaddress", emailData.getEmailAddress2()); | ||||||
|  |         params.add("emaillocale", emailData.getEmailLocale()); | ||||||
|  |         mockMvc.perform(MockMvcRequestBuilders.get("/email/requestparameters") | ||||||
|  |                 .params(params)) | ||||||
|  |                 .andExpect(status().isOk()) | ||||||
|  |                 .andExpect(content().string(containsString("en-US"))); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Test | ||||||
|  |     public void whenCallSessionAttributes_thenReturnEmailData() throws Exception { | ||||||
|  |         mockMvc.perform(MockMvcRequestBuilders.get("/email/sessionattributes")) | ||||||
|  |                 .andExpect(status().isOk()) | ||||||
|  |                 .andExpect(content().string(containsString("Good morning !"))); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Test | ||||||
|  |     public void whenCallServletContext_thenReturnEmailData() throws Exception { | ||||||
|  |         mockMvc.perform(MockMvcRequestBuilders.get("/email/servletcontext")) | ||||||
|  |                 .andExpect(status().isOk()) | ||||||
|  |                 .andExpect(content().string(containsString("jhon.doe@example.com"))); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Test | ||||||
|  |     public void whenCallBeanData_thenReturnEmailData() throws Exception { | ||||||
|  |         mockMvc.perform(MockMvcRequestBuilders.get("/email/beandata")) | ||||||
|  |                 .andExpect(status().isOk()) | ||||||
|  |                 .andExpect(content().string(containsString("jhon.doe@example.com"))); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  | } | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user