Я использую весеннюю загрузку 2.1.2 ...
Интересно, существует ли существующая концепция или функция в весенней загрузке, чтобы создать общую страницу добавления или редактирования для общих сущностей с CrudRepository?Я хочу, чтобы снова и снова писать весь шаблонный код для добавления или редактирования страниц в тимелист и использовать вместо него общую страницу.
Так что вместо этого я хотел бы использовать такую общую форму:
<form action="#" th:action="@{/edit-$entityName}" th:object="${entity}" method="post">
<input type="hidden" th:field="*{id}" id="id"/>
<!-- iterating over each field and creating an input form element -->
<div class="form-group" th:each="field: ${fields}">
<label for="${field}" th:text="${field}"/>
<input type="text" th:value="${entity['name']}" th:attr="id=#{${field}}, placeholder=#{$field}" class="form-control">
<span th:if="${#fields.hasErrors($field)}" th:errors="*{$field}"></span>
</div>
<button type="submit" class="btn btn-default">save</button>
</form>
С контроллером, который добавляет поля:
@Controller
public class EntityController {
@Autowired
private EntityService service;
@RequestMapping("/edit-entity/{id}")
public String editProject(Map<String, Object> model, @PathVariable("id") Integer id) {
Optional<MyEntity> byId = service.getById(id);
model.put("entity", byId.orElse(new MyEntity()));
model.put("entityName", "myEntity");
List<String> fields = new ArrayList<>();
for (Field field : MyEntity.class.getDeclaredFields()) {
if (!field.getName().equals("id"))
fields.add(field.getName());
}
model.put("fields", fields);
return "edit-page";
}
}
Подробно: у меня есть простая сущность "пользователь"
@Entity
@Table(name = "user_tbl")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
private String name;
private String email;
private int age;
public User() {
}
public User(String name, int age) {
this.name = name;
this.age = age;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
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;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
Чтобы добавить или отредактировать этого пользователяСущность Я создал следующую форму (без кода контроллера и некоторой разметки вокруг формы):
<form action="#" th:action="@{/edit-user}" th:object="${user}" method="post">
<input type="hidden" th:field="*{id}" id="id"/>
<div class="form-group">
<label for="name">Name</label>
<input type="text" th:field="*{name}" id="name" placeholder="Name" class="form-control">
<span th:if="${#fields.hasErrors('name')}" th:errors="*{name}"></span>
</div>
<div class="form-group">
<label for="email">Email</label>
<input type="text" th:field="*{email}" id="email" placeholder="email" class="form-control">
<span th:if="${#fields.hasErrors('email')}" th:errors="*{email}"></span>
</div>
<div class="form-group">
<label for="age">Alter</label>
<input type="text" th:field="*{age}" id="age" placeholder="age" class="form-control">
<span th:if="${#fields.hasErrors('age')}" th:errors="*{age}"></span>
</div>
<button type="submit" class="btn btn-default">save</button>
</form>
Если я собираюсь создать другую сущность anotherUser, я собираюсь скопировать, вставить все это и, возможно, изменить некоторыеимена или поля или что-то еще, но это полностью похоже друг на друга ...
Есть ли способ сделать это один раз и повторно использовать для всех других моих сущностей, которые я определю?