Каков наилучший способ заполнить список массивов и заставить его придерживаться при перезагрузке страницы - PullRequest
0 голосов
/ 24 января 2019

Я пытался учить себя Java, и я не могу найти ответ, который ищу в отношении списков массивов.

Мой проект имеет форму, которая при загрузке страницы загружаетсянесколько списков, которые я создал, например, типы бизнес-агентств в флажках или бизнес-класс, который использует список для отображения выпадающих вариантов.

Я писал следующий код для заполнения различных разделов полей.

    @GetMapping("/directBind")
    public String getDirectBind(Model model){
        DirectBind directBind = new DirectBind();
        List<String> businessAgencies = new ArrayList<String>();
        businessAgencies.add("Personal");
        businessAgencies.add("Commercial");
        businessAgencies.add("Life");
        businessAgencies.add("Benefits");
        businessAgencies.add("Health");
        businessAgencies.add("Non P and C");
        model.addAttribute("businessAgencies", businessAgencies);
        List<String> businessAgencyList = new ArrayList<String>();
        directBind.setBusinessAgencyList(businessAgencyList);

        List<Ams360Policy> ams360Policies = new ArrayList();
        Ams360Policy ams360Policy = new Ams360Policy();
        ams360Policies.add(ams360Policy);
        model.addAttribute("ams360Policies", ams360Policies);

        List<String> billTypeList = new ArrayList<String>();
        billTypeList.add("Direct Bill");
        billTypeList.add("Agency Bill");
        model.addAttribute("billTypeList", billTypeList);
        ams360Policy.setBillTypeOptions(billTypeList);

        directBind.setDirectBox(true);
        directBind.setServiceLevel(true);

        List<String> businessClasses = new ArrayList<>();
        businessClasses.add("Animal Services");
        businessClasses.add("Bonds");
        businessClasses.add("Contractor");
        model.addAttribute("businessClasses", businessClasses);
        directBind.setBusinessClasses(businessClasses);

        model.addAttribute("directBind", directBind);

        return "directBind";
    }

Мой вопрос заключается в том, действительно ли это лучший способ создания списка массивов, или это должно идти куда-то еще?Поскольку он живет только в «функции, которая извлекает / загружает форму», поэтому любые изменения в форме, например, разрешение пользователю добавлять новую строку / поле ввода, приведут к тому, что этот кусок кода придется переписать в addRow.функция.Это просто кажется излишним, и мне было интересно, есть ли лучшее место, чтобы добавить это.Как отдельная функция контроллера или функция конструктора в файле классов Java?

Я также заметил, что некоторые поля ввода, в которые пользователь вводит ответ, останутся на странице при добавлении новой строки, а некоторые пользовательские вводы не останутся.Также хотел бы помочь с этим.Не уверен, что это связано с проблемой, потому что я генерирую поля по-разному, или это отдельный вопрос.

Вот часть HTML-кода формы:

<form  class="ui form" th:object="${directBind}" th:action="directBind" method="post"  style="padding:0 10px;">
  <h4>Customer Setup</h4>
  <div class="row">
      <label >Contact Name (First/Last):</label>
      <input type="text" th:field="*{contactName}" required="true" />
  </div>
  <div class="row">
      <label for="formAddress">Address:</label>
      <input type="text" id="formAddress" th:field="*{formAddress}" required="true"/>
  </div>
  <div class="row">
      <label for="phoneNumber">Phone Number:</label>
      <input type="text" id="phoneNumber" th:field="*{phoneNumber}" required="true"/>
  </div>
  <div class="row">
      <label for="email">Email:</label>
      <input type="email" id="email" th:field="*{email}" required="true"/>
  </div>
  <div class="row">
      <label for="website" style="margin-top: 1em;"> Website:</label>
      <input type="text" id="website" th:field="*{website}" required="true"/>
  </div>
  <div class="row">
      <label for="nameInsured">Name Insured:</label>
      <input type="text" id="nameInsured" th:field="*{insuredName}" required="true"/>
  </div>
  <div class="row">
      <label>Business with Agency:</label>
      <div th:each="businessAgency : ${businessAgencies}">
          <input type="checkbox" th:field="*{businessAgencyList}" th:value="${businessAgency}"/>
          <label th:text="${businessAgency}">Business with Agency</label>
      </div>

  </div>
<!-- Business Class Drop Down Field Below: -->
      <div class="row">
          <label>Business Class: </label>
          <div >
              <select class="form-control" th:field="*{businessClasses}" required="true">
                  <option th:each="businessClass : ${businessClasses}" th:value="${businessClass}" th:text="${businessClass}"></option>
              </select>
          </div>

      </div>
      <div class="row">
      <label for="descriptionOfOps">Description of Operations:</label>
      <input type="text" id="descriptionOfOps" th:field="*{descriptionOfOps}" required="true" />
  </div>



  <div class="formFooter">
      <input id="send"  type="submit" value="send" name="send" class="btn btn-success finish" data-loading-text="Sent!" />
  </div>
</form>

1 Ответ

0 голосов
/ 24 января 2019

Кажется, вы генерируете статический контент каждый раз, когда вызывается конечная точка REST.Первый принцип, в связи с этим, который вы, возможно, захотите исследовать, - это разделение интересов .Хорошим примером для вашего случая является MVC , который широко используется и обозначает разделение этих трех слоев: Модель-Вид-Контроллер.Существуют интегрированные среды, поддерживающие этот подход.

Модель должна быть отдельной базой данных или хранилищем памяти, где вы храните свои данные - в вашем случае ArrayLists.Вы бы сохранили все изменения здесь и предоставили одни и те же данные каждому запрашивающему.

В данный момент вы храните данные модели в части просмотра своего кода, что является неприятным по многим причинам.

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

Вот случайный простой пример по реализации этого принципа проектирования, который поможет вам начать работу.,В этом случае следует использовать один класс для каждого слоя, и вы можете увеличивать сложность по мере роста вашего сервиса.

...