Как отправить данные формы нескольких объектов в Spring-Boot Controller - PullRequest
0 голосов
/ 10 июля 2020

У меня есть форма, которая пытается создать 3 разных java объекта.

<form enctype="multipart/form-data" th:action="@{/addMasterCarrier}" method="post"  class="tab-content">
            <div class="row">
                    <div class="row">
                        <div class="col-xs-3 col-sm-3  text-right">
                            <label>Master Carrier Short Name </label>
                        </div>
                        <div class="col-xs-7 col-sm-7" >
                            <input type="text" class="form-control" placeholder="Master Carrier Name" th:field="${newMasterCarrier.shortName}" required="true"/>
                        </div>
                    </div>
                    <br/>
            </div>
            <br/>
            <div class="row" id="addMasterCarrierApptDets">
                <div class="row">
                    <div class="col-xs-3 col-sm-3  text-right">
                        <label>Parent Company Carrier </label>
                    </div>
                    <div class="col-xs-7 col-sm-7" >
                        <input type="text" class="form-control" placeholder="Carrier - Personal Lines" th:field="${newCarrierAppointment.parentCompanyCarrier}" required="true"/>
                    </div>
                </div>
                <br/>
                <div class="row">
                    <div class="col-xs-3 text-right">
                        <strong>Select A Line of Business:</strong>
                    </div>
                </div>
                <div class="row">
                    <div class="col-xs-3 text-right"><input type="checkbox" id="plBox" th:field="${newMasterCarrierAppt.personalLines}" style="margin-right: .5rem;"/></div>
                    <div class="col-xs-7 col-sm-7" > <label> Personal Lines  </label></div>
                </div>
                <div class="row">
                    <div class="col-xs-3 text-right"> <input type="checkbox" id="mmClBox" th:field="${newMasterCarrierAppt.midMarketCommercial}" style="margin-right: .5rem;"/></div>
                    <div class="col-xs-7 col-sm-7" > <label>   Mid-Market Commercial </label></div>
                 </div>
                <div class="row">
                    <div class="col-xs-3 text-right"> <input type="checkbox" id="smlClBox" th:field="${newMasterCarrierAppt.smallCommercial}" style="margin-right: .5rem;"/></div>
                    <div class="col-xs-7 col-sm-7" > <label>  Small Commercial </label></div>
                </div>
                <br/>
                <br/>
            </div>
            <br/>
            <div class="text-right">
                <input type="submit" value="Submit" class="btn btn-default"/>
            </div>
<!--            <div class="row text-right">-->
<!--               <input type="submit" formnovalidate="formnovalidate"  name="addAnotherCarrier" id="addAnotherCarrier" class="btn btn-default" style="margin-left: 1rem; margin-bottom: 1rem;" value="Add Another Line of Business"/>-->

<!--            </div>-->
    </form>
    <div class="row">
      <a class="btn btn-default" id="addAnother">Add Another Line of Business</a>
    </div>

Используя JQuery, я динамически добавляю новые поля в форму:

//inside document ready function
var count = 0;
$('#addAnother').click(function() {
  count++;
  $('#addMasterCarrierApptDets').append('<div class="row"> <div class="col-xs-3 col-sm-3  text-right"><label>Parent Company Carrier </label></div> <div class="col-xs-7 col-sm-7" ><input type="text" class="form-control" placeholder="Carrier - Personal Lines" field="${newCarrierAppointment' + count + '.parentCompanyCarrier}" required="true"/> </div></div><br/> <div class="row"><div class="col-xs-4 col-sm-4  text-right"><label> <input type="checkbox" field="${newMasterCarrierAppt' + count + '.personalLines}" style="margin-right: .5rem;"/> Personal Lines  </label></div></div><br/> <div class="row"><div class="col-xs-4 col-sm-4  text-right"><label> <input type="checkbox"  field="${newMasterCarrierAppt' + count + '.midMarketCommercial}" style="margin-right: .5rem;"/> Middle Market Commercial </label></div></div><br/> <div class="row"><div class="col-xs-4 col-sm-4  text-right"><label> <input type="checkbox"  field="${newMasterCarrierAppt' + count + '.smallCommercial}" style="margin-right: .5rem;"/> Small Commercial  </label></div></div>');

});

Как я могу получить поля формы в моем контроллере загрузки Spring / как следует настроить метод контроллера? Я пробовал @ModelAttribute и @RequestParams, но думаю, что часть проблемы заключается в том, что если у меня есть несколько newCarrierAppts и newMasterCarrierAppts, то у меня есть список, а не ModelAttribute.

Вот что у меня пытался

@RequestMapping(value="/addMasterCarrier")
    public String addMaster(@ModelAttribute(value = "newMasterCarrier")MasterCarrier newMasterCarrier, @ModelAttribute(value="newCarrierAppointment")List<String> newCarrierAppointment,@ModelAttribute(value="newMasterCarrierAppt")List<Boolean> newMasterCarrierAppt){
        MasterCarrier newMaster = masterCarrierRepository.save(newMasterCarrier);

        for(String car : newCarrierAppointment){
            CarrierAppointment carrier = new CarrierAppointment();
            carrier.setParentCompanyCarrier(car);
            carrierAppointmentRepository.save(carrier);

            for(Boolean newmca : newMasterCarrierAppt) {
                MasterCarrierAppt masterCarrierAppt = new MasterCarrierAppt();
                masterCarrierAppt.setMasterCarrier(newMaster);
                masterCarrierAppt.setCarrier(carrier);
                masterCarrierAppt.setSmallCommercial(newmca);
                masterCarrierAppt.setMidMarketCommercial(newmca);
                masterCarrierAppt.setPersonalLines(newmca);
                masterCarrierApptRepository.save(masterCarrierAppt);
            }
        }
        return "mastercarriers"
        }

Я также пробовал использовать модель, но данные отправляют обратно один carrierAppt с двумя строками, разделенными запятой в одном поле.

    @RequestMapping(value="/addMasterCarrier")
    public String addMaster(@ModelAttribute(value = "newMasterCarrier")MasterCarrier newMasterCarrier, @ModelAttribute(value="newCarrierAppointment")CarrierAppointment newCarrierAppointment,@ModelAttribute(value="newMasterCarrierAppt")MasterCarrierAppt newMasterCarrierAppt){
        MasterCarrier newMaster = masterCarrierRepository.save(newMasterCarrier);
        carrierAppointmentRepository.save(newCarrierAppointment);

        masterCarrierApptRepository.save(newMasterCarrierAppt);
         return  "masterCarriers";
        }
...