Thymeleaf एक टेम्पलेट इंजन है, जो JAVA में लिखा गया एक पुस्तकालय है। यह एक डेवलपर को एचटीएमएल, एक्सएचटीएमएल या एचटीएमएल 5 पेज टेम्पलेट को परिभाषित करने की अनुमति देता है और बाद में इसे अंतिम पृष्ठ उत्पन्न करने के लिए डेटा से भर देता है। इसलिए यह एक मॉडल-व्यू-कंट्रोलर पैटर्न के मॉडल-व्यू भाग का एहसास करता है।
Thymeleaf का महत्वपूर्ण डिज़ाइन सिद्धांत यह है कि एक टेम्पलेट को ठीक से लिखा जाना चाहिए (X) HTML।
संस्करण | दिनांक | नवीनतम प्रकाशन | दिनांक |
---|---|---|---|
3.xx | 2016/05/08 | 3.0.6 | 2017/05/07 |
2.xx | 2012-02-09 | 2.1.5 | 2016/07/11 |
अजाक्स के माध्यम से फार्म जमा करने के लिए:
<div id="yourPanel" th:fragment="yourFragment">
<form id="yourForm" method="POST"
th:action="@{/actions/postForm}"
th:object="${yourFormBean}">
<div class="form-group">
<label for="param1"></label>
<input class="form-component" type="text" th:field="*{param1}" />
</div>
<div class="form-group">
<label for="param2"></label>
<input class="form-component" type="text" th:field="*{param2}" />
</div>
<div class="form-group">
<label for="param3"></label>
<input class="form-component" type="checkbox" th:field="*{param3}" />
</div>
<button type="submit" class="btn btn-success">Save</button>
<a href='#' class="btn btn-default">Cancel</a>
</form>
</div>
<script th:inline="javascript">
/*<![CDATA[*/
$(document).ready(function () {
/*[+
var postUrl = [[@{/actions/postForm(
additionalParam=${#httpServletRequest.getParameter('additionalParam')}
)}]];
+]*/
$("#yourForm").submit(function (e) {
e.preventDefault();
$.post(postUrl,
$(this).serialize(),
function (response) {
var isErr = 'hasError';
// when there are an error then show error
if (response.indexOf(isErr) > -1) {
$("#yourPanel").html(response);
} else {
var formData = $("#yourForm").serializeArray(),
len = formData.length,
urlEnd = '';
for (i = 0; i < len; i++) {
urlEnd += formData[i].name + '=' + encodeURIComponent(formData[i].value) + '&';
}
/*[+
var urlReplacement = [[@{/another/page(
additionalParam=${#httpServletRequest.getParameter('additionalParam')}
)}]] + urlEnd;
+]*/
window.location.replace(urlReplacement);
}
}
);
return false;
});
});
/*]]>*/
</script>
YourFormBean वर्ग:
@lombok.Getter
@lombok.Setter
@lombok.NoArgsConstructor
public class YourFormBean {
private String param1;
private String param2;
private boolean param3;
}
नियंत्रक कोड:
@RequestMapping(value = "/actions/postForm", method = RequestMethod.POST)
public String saveForm(Model model,
@RequestParam("additionalParam") Integer additionalParam,
@Valid @ModelAttribute("yourFormBean") YourFormBean yourFormBean,
BindingResult bindingResult,
RedirectAttributes redirectAttributes) {
if (bindingResult.hasErrors()) {
model.addAttribute("hasError", true);
return "your/template :: yourFragment";
}
redirectAttributes.addAttribute("additionalParam", additionalParam);
return "redirect:/another/page";
}
Thymeleaf आधिकारिक डाउनलोड पृष्ठ पर जाएं ।
मावेन निर्भरता
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf</artifactId>
<version>3.0.1.RELEASE</version>
</dependency>
धीरे-धीरे निर्भरता
compile group: 'org.thymeleaf', name: 'thymeleaf', version: '3.0.1.RELEASE'
उदाहरण विन्यास
संस्करण 3.0 से शुरू, Thymeleaf केवल जावा कॉन्फिग का समर्थन करता है।
public ViewResolver viewResolver() {
ThymeleafViewResolver resolver = new ThymeleafViewResolver();
resolver.setTemplateEngine(templateEngine());
resolver.setCharacterEncoding("UTF-8");
resolver.setContentType("text/html; charset=UTF-8");
return resolver;
}
viewResolver()
विधि में आप उदाहरण के लिए एन्कोडिंग और सामग्री प्रकार सेट कर सकते हैं। अधिक जानकारी
public TemplateEngine templateEngine() {
SpringTemplateEngine engine = new SpringTemplateEngine();
engine.setTemplateResolver(templateResolver());
return engine;
}
templateEngine()
, आप कस्टम बोलियाँ जोड़ सकते हैं। उदाहरण के लिए स्प्रिंग सिक्योरिटी बोली को जोड़ने के लिए आप इसे इस engine.addDialect(new SpringSecurityDialect());
तरह कर सकते हैं engine.addDialect(new SpringSecurityDialect());
public ITemplateResolver templateResolver() {
SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver();
resolver.setApplicationContext(applicationContext);
resolver.setPrefix("/views/");
resolver.setSuffix(".html");
resolver.setTemplateMode(TemplateMode.HTML);
resolver.setCharacterEncoding("UTF-8");
return resolver;
}
templateResolver()
में उपसर्ग और प्रत्यय के लिए सेटर देखें। यह Thymeleaf को बताता है कि, हर बार नियंत्रक दृश्य को लौटा देगा, Thymeleaf इन नामों को देखेगा जो html वेबप webapp/views/
निर्देशिका में हैं और आपके लिए .html
प्रत्यय हैं।
उदाहरण
@RequestMapping(value = "/")
public String homePage() {
return "foo/my-index";
}
Thymeleaf को webapp/views/foo/
directory में my-index.html
नाम का html दिखाई देगा। उदाहरण विन्यास के अनुसार।
रूप वस्तु
package formSubmission;
public class Person {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name= name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
नियंत्रक
package formSubmission;
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.PostMapping;
@Controller
public class FriendsController {
@GetMapping("/friends")
public String friendForm(Model model) {
model.addAttribute("personForm", new Person());
return "friendsForm";
}
@PostMapping("/friends")
public String submissionResult(@ModelAttribute("personForm") Person person) {
return "result";
}
}
friendsForm.html
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Friend form</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<h1>Friend Form</h1>
<form th:action="@{/friends}" th:object="${personForm}" method="post">
<p>Name: <input type="text" th:field="*{name}"/></p>
<p>Age: <input type="number" th:field="*{age}"/></p>
<p><input type="submit" value="Submit"/></p>
</form>
</body>
</html>
result.html
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Submission result</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<h1>th:text="'My friend ' + ${personForm.name} + ' is ' + ${personForm.age} + ' years old'"</h1>
</body>
</html>
यदि आप अपनी वेबसाइट के कुछ हिस्सों को बदलना चाहते हैं, तो ajax इसे करने का एक आसान तरीका है।
वह वेबसाइट जहां आप चयनित मूल्य के आधार पर सामग्री को बदलना चाहते हैं:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:th="http://www.thymeleaf.org">
<head>
<title>Index</title>
</head>
<body>
<select id="selection">
<option>Content 1</option>
<option>Content 2</option>
</select>
<div id="replace_div">
Content goes here
</div>
<!-- JQury from Google CDN -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script>
$(document).ready(function () {
//call function when page is loaded
getContent();
//set on change listener
$('#selection').change(getContent);
function getContent() {
//create url to request fragment
var url = /content/;
if ($('#selection').val() === "Content 1") {
url = url + "content1";
} else {
url = url + "content2";
}
//load fragment and replace content
$('#replace_div').load(url);
}
})
</script>
</body>
</html>
और सामग्री। उन टुकड़ों के साथ जो आप चयनित मूल्य के आधार पर शामिल करना चाहते हैं:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:th="http://www.thymeleaf.org">
<head>
</head>
<body>
<div th:fragment="content1">
This is Content 1
</div>
<div th:fragment="content2">
This is Content 2
</div>
</body>
</html>
अंतिम लेकिन कम से कम स्प्रिंग MVC ContentController.java :
@Controller
@RequestMapping("content")
public class ContentController {
@RequestMapping("")
public String loadContent() {
return "website";
}
@RequestMapping("content1")
public String getContent1() {
return "content :: content1";
}
@RequestMapping("content2")
public String getContent2() {
return "content :: content2";
}
}
नियंत्रक में उदाहरण विधि
@RequestMapping(value = "/test")
public String showCheckbox(Model model) {
boolean myBooleanVariable = false;
model.addAttribute("myBooleanVariable", myBooleanVariable);
return "sample-checkbox";
}
देखें: नमूना- checkbox.html
<input
type="checkbox"
name="myBooleanVariable"
th:checked="${myBooleanVariable}"/>
th:name
उपयोग न करें th:name
चीकबोक्स के लिए th:name
, सिर्फ name