#html #spring #spring-boot #thymeleaf
Вопрос:
Ребята, я новичок в Thymeleaf, моя цель-иметь конечную точку, которая возвращает строку с содержимым html-файла. Должно быть легко, но этот html-файл содержит код thymeleaf и использует фрагменты из других файлов, поэтому использование Files.ReadString(путь) не достигает цели.
Как я могу их включить (я хочу включать только фрагменты, мне не нужно обрабатывать файл)?
Это то, что я делал до сих пор:
@GetMapping(path = "/get-template-html")
public String getTemplateHTMLEndpoint() {
String templateHtml = "Problems reading template.html";
try {
String stringPath = new ClassPathResource("templates/template.html").getFile().getPath();
Path path = Path.of(stringPath);
templateHtml = Files.readString(path);
} catch (IOException e) {
e.printStackTrace();
}
return templateHtml;
}
Но в другом методе, где я обрабатываю файл, передавая контекст, я получил ошибку о фрагменте «нижний колонтитул::нижний колонтитул».
String templateHtml = callGetTemplateHTMLEndPoint();
StringTemplateResolver stringTemplateResolver = new StringTemplateResolver();
stringTemplateResolver.setTemplateMode(TemplateMode.HTML);
TemplateEngine templateEngine = new TemplateEngine();
templateEngine.setTemplateResolver(stringTemplateResolver);
Context context = new Context();
context.setVariable("expenseReportPdf", expenseReportPdf);
context.setVariable("expensePdf", expensePdfList);
context.setVariable("expenseImg", jpgFile);
context.setVariable("amountCompanyCurrency", amountCompanyCurrency);
context.setVariable("expenseIncurredList", expenseIncurredList);
context.setVariable("expenseRiepiloghiList",expenseRiepiloghiList);
context.setVariable("advancePayBigDecimal", advancePayBigDecimal);
context.setVariable("dailyAllowanceList", dailyAllowanceList);
context.setVariable("dailyAllowanceFlag", dailyAllowanceFlag);
context.setVariable("logo",logo);
context.setVariable("logoSmartex",logoSmartex);
String renderedHtmlContent = templateEngine.process(templateHtml, context);
Комментарии:
1. Что именно вы пробовали? Если вы просто хотите использовать фрагменты Thymeleaf с Spring Boot, вы можете посмотреть одну из моих записей в блоге (например wimdeblauwe.com/blog/2021/09/14/… ) для примера, в котором используются фрагменты.
Ответ №1:
Если вы создали «стандартную» весеннюю загрузку с проектом Thymeleaf (например, с помощью https://start.spring.io), затем шаблоны будут автоматически разрешены, если вы поместите их в src/main/resources/templates
Поэтому , если вы создали src/main/resources/templates/templates.html
, вы можете создать контроллер, который будет использовать этот шаблон следующим образом:
@Controller
@RequestMapping("/")
public class MyController {
@GetMapping("/get-template-html")
public String getTemplateHtml() {
return "templates"; // name of your template file without the .html extension
}
}
Если вы запустите приложение и получите доступ http://localhost:8080/get-template-html, вы должны увидеть HTML-код шаблона.
Комментарии:
1. Да, я знаю, Тай, но это не то, чего я хочу. Мне нужна конечная точка для его извлечения, потому что этот файл используется в разных проектах
2. Вы хотите получить необработанный шаблон без обработки Thymeleaf, чтобы вы могли выполнить вызов REST из одного проекта в другой и повторно использовать его? Если да, то не можете ли вы создать общую библиотеку Java?
3. Не знаю, кажется, это хорошее решение, я делаю только то, что сказал мне мой босс, я всего лишь стажер.