У меня есть форма, которая включает в себя таблицу.Я хочу иметь возможность динамически добавлять строки в эту таблицу, отправив запрос AJAX и добавив результат в тело таблицы.Этот запрос должен запустить рендеринг шаблона и добавить соответствующий элемент в мой объект передачи данных.Это позволяет мне удобно сохранять объект, когда пользователь нажимает кнопку отправки.
Мой вопрос: какой метод обработчика мне нужно определить в контроллере, чтобы добавить эту строку в мою модель?Как я могу передать модель, используя мой запрос AJAX?Можно ли это сделать вообще?
Ниже вы можете найти фрагмент для создания таблицы:
<div class="form-group form-row">
<button type="submit" id="addAttribute" name="addAttribute" class="btn btn-success">
<i class="fa fa-fw fa-plus"></i> New attribute
</button>
</div>
<table>
<thead>
<tr>
<th> </th>
<th>Attribute name</th>
</tr>
</thead>
<tbody id="attributeList">
</tbody>
</table>
Это мой объект передачи данных:
public class IEForm
{
private String name;
// ...
// IEAttribute is defined somewhere else, but this doesn't matter right now
private List<IEAttribute> attributes;
// getters and setters
public List<IEAttribute> getAttributes()
{
return this.attributes;
}
public void setAttributes(List<IEAttribute> attributes)
{
this.attributes = attributes;
}
}
Myметоды обработчика контроллера для создания страницы формы и для запроса AJAX:
@RequestMapping("/create")
String create(Model model)
{
model.addAttribute("form", new IEForm());
return "iecreation/creation";
}
@RequestMapping(value = "/addAttribute", params = {"addAttribute"})
public String addAttribute(IEForm dto, BindingResult result)
{
dto.getAttributes().add(new IEAttribute());
return "iecreation/newAttribute";
}
Страница AJAX:
<tr>
<td><i class="fa fa-fw fa-key"></i></td>
<td>
<input type="text" class="form-control col-lg-8" placeholder="Attributname"
th:field="???"/>
</td>
</tr>
Код JavaScript для добавления ответа AJAX в таблицу
$(document).ready(function()
{
$("#newAttribute").on("click", function()
{
$.ajax({
type: "GET",
url: "/ie/create/newAttribute",
success: function(response)
{
$("#attributeList").append(response);
}
});
});
});
Я попробовал этот подход , но он не работал, как ожидалось, так как моя форма постоянно отправлялась (выполнялся неправильный обработчик, и страница должна была быть перезагружена).
Этот ответ не помог мне, так как он действителен для JSP .
Коллега предложил добавить большое количество скрытых элементов div, а затем динамически сделать их видимыми, нажав кнопкукнопка.Однако мне не нравится это решение, так как оно не очень чистое и количество атрибутов ограничено.
Спасибо за вашу поддержку!