страница редактирования родовой сущности весеннего сапога - PullRequest
0 голосов
/ 22 февраля 2019

Я использую весеннюю загрузку 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, я собираюсь скопировать, вставить все это и, возможно, изменить некоторыеимена или поля или что-то еще, но это полностью похоже друг на друга ...

Есть ли способ сделать это один раз и повторно использовать для всех других моих сущностей, которые я определю?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...