У меня есть форма, которая пытается создать 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";
}