Я пытаюсь создать HTML с формой с помощью тимиана (используя Spring-Boot).
В этой форме (в list.html) у пользователя будет список «серверов» (класс Server), а рядом с каждым сервером будет установлен флажок.
После того, как пользователь выбрал несколько серверов и отправил форму, результаты возвращаются в Контроллер (метод post с ajax), а затем контроллер вызывает веб-сервис для получения «сервисов» из другого источника, это означает, что « услуги "будут храниться в памяти Java, а не в базе данных.
В этой части я понял все правильно, я создал класс-оболочку для класса Server и предоставил его в качестве ModelAttribute, поэтому после выбора пользователя и публикации формы контроллер получает упакованный объект с выбором серверов, а затем генерирует объекты «service» используя веб-сервис.
После отправки страницы и выбора серверов будет отображаться новая страница (status.html, еще не сгенерированная), на этот раз со списком «услуг» (класс обслуживания) для каждого «сервера», который был выбран в предыдущая страница.
Теперь для каждой службы я хочу установить флажок рядом с каждой службой, а затем, когда страница будет отправлена, выбор вернется к контроллеру для дальнейших действий.
Поскольку сервисы не хранятся в базе данных, следовательно, у них нет идентификатора, я не могу обернуть сервисы для отправки обратно в контроллер.
Прямо сейчас в моей БД есть только таблица «серверов», поскольку мне не нужно хранить сервисы в базе данных.
Код для Server.java:
public class Server {
private int id;
private String name;
private String domain;
private List<Service> services;
public Server(String name, String domain, List<Service> services) {
this.name = name;
this.domain = domain;
this.services = services;
}
}
Код для Service.java:
public class Service {
private String name;
private String status;
private String startup;
public Service(String name, String status, String startup) {
this.name = name;
this.status = status;
this.startup = startup;
}
}
Код для ClientSelection.java (оболочка для Сервера):
public class ClientSelection {
private int id;
private List<Server> servers;
public void generateServices(){
// some code to generate services for each server selected
}
}
Код для ServerController.java:
public class ServerController {
// == fields ==
private ServerService service;
// == constructors ==
@Autowired
public ServerController(ServerService service) {
this.service = service;
}
@PostMapping("servers")
@ResponseBody
public ModelAndView processMessage(@ModelAttribute("clientSelection") ClientSelection clientSelection) throws Exception {
cs = clientSelection;
cs.generateServices(); // Assign Services to each Server
String redirect = "redirect:/" + "status";
return new ModelAndView(redirect,"clientSelection",cs);
}
@GetMapping("listServers")
public String listServers(Model model){
ClientSelection clientSelection = new ClientSelection();
List<Server> servers = service.getAllServers();
model.addAttribute("clientSelection", clientSelection);
model.addAttribute("listServers", servers);
return "list";
}
@GetMapping("status")
public String statusServers(Model model){
// Totally clueless on what to pass to this view in order to achieve my goals
}
@PostMapping("services")
@ResponseBody
public ModelAndView processServices()
// Totally clueless on what to do in order to get a list of selected services
}
}
Код для основного div файла list.html:
<div class="container">
<div align="center">
<form id="main-form" th:action="@{/servers}" method="post" th:object="${clientSelection}">
<table class="table table-hover">
<tr>
<th>Server Name</th>
<th>Domain</th>
</tr>
<th:block th:each="server : ${listServers}">
<tr>
<td th:text="${server.name}">...</td>
<td th:text="${server.domain}">...</td>
<td><input type="checkbox" th:field="*{servers}" th:value="${server.id}"/></td>
</tr>
</th:block>
</table>
<button id="submit-form" class="ui button" type="button">Submit</button>
</div>
<script>
$(function() {
$('#submit-form').click(saveForm);
});
function saveForm(){
$.ajax({
method: "POST",
url: "servers",
data: $('#main-form').serialize(),
success: function(status){
$('#please').html(status)
}
});
}
</script>
Я ищу решение с помощью thymeleaf и Spring-Boot (MVC), я стараюсь избегать создания таблицы в базе данных для сервисов и использовать отношение один ко многим, потому что сервисы динамические и может меняться часто.