Ранее я использовал этот метод для фильтрации списка объектов, поэтому я понятия не имею, почему этот метод не работает.Есть три результата, которые должны отображаться в этой таблице, вместо этого я получаю Результаты не найдены.В функции контроллера, если я отлаживаю его, я вижу, что он регистрирует contactList ... поэтому не уверен, почему он не заполняется в таблице.Я продолжаю получать эту ошибку, не связанную: ни BindingResult, ни простой целевой объект для имени компонента «contactList [0]» не доступны в качестве атрибута запроса.Я не уверен, как его связать.
Вот таблица, которая не заполняется.Вся HTML-страница проходит через CarrierAppointment в качестве объекта.
<table class="table table-striped" data-toggle="table" data-show-toggle="true" data-classes="table-no-bordered" data-striped="true" data-search="true" data-show-columns="true" >
<thead>
<th>Contact Type</th>
<th>Contact Name</th>
<th>Contact's Email</th>
<th>Contact's Phone</th>
<th th:if="${role.isCarrierAdmin}" class="text-right"><button type="submit" name="addCommercialContact" class="btn btn-default" ><span class="fa fa-plus"></span></button></th>
</thead>
<tbody>
<tr th:each="contact,stat : *{contactList}">
<td> <select class="form-control" th:field="*{contactList[__${stat.index}__].contactType}">
<option value="Account Manager">Account Manager</option>
<option value="Marketing Manager">Marketing Manager</option>
<option value="Underwriter">Underwriter</option>
</select></td>
<td> <input type="text" class="form-control" th:field="*{contactList[__${stat.index}__].contactName}"/></td>
<td> <input type="text" class="form-control" th:field="*{contactList[__${stat.index}__].contactEmail}"/></td>
<td><input type="text" class="form-control" th:field="*{contactList[__${stat.index}__].contactPhone}"/></td>
<td> <input type="hidden" class="form-control" th:field="*{contactList[__${stat.index}__].contactTable}" th:value="Commercial Lines"/></td>
<td class="text-right" th:if="${role.isCarrierAdmin}"> <button type="submit" name="removeContact" th:value="${stat.index}" class="btn btn-danger"><span class="fa fa-trash"></span></button></td>
</tr>
</tbody>
</table>
Вот функция контроллера:
@RequestMapping(value="/carrierAppointment/details/{id}")
public String viewDetails(Model model,@PathVariable("id")CarrierAppointment carrierAppointment){
String username= SecurityContextHolder.getContext().getAuthentication().getName();
Role role=roleRepository.findByUsernameContainingIgnoreCaseAndActive(username,true);
Document newDoc=new Document();
List<CarrierContact> contactList = new ArrayList<>();
CarrierContact contact = new CarrierContact();
contactList.add(contact);
model.addAttribute("contact",contact);
model.addAttribute("role",role);
model.addAttribute("newDocument",newDoc);
model.addAttribute("docs",documentRepository.findByCarrierAppointment(carrierAppointment));
model.addAttribute("carrier",carrierAppointment);
model.addAttribute("contactList",contactList);
return "carrierAppointments/carrierDetails";
}
Модель контакта
@Entity
@Table(name="CarrierContact")
public class Contact {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="contactId")
private Long id;
private String contactType;
private String contactName;
private String contactEmail;
private String contactPhone;
private Long carrier;
private String contactTable;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getContactType() {
return contactType;
}
public void setContactType(String contactType) {
this.contactType = contactType;
}
public String getContactName() {
return contactName;
}
public void setContactName(String contactName) {
this.contactName = contactName;
}
public String getContactEmail() {
return contactEmail;
}
public void setContactEmail(String contactEmail) {
this.contactEmail = contactEmail;
}
public String getContactPhone() {
return contactPhone;
}
public void setContactPhone(String contactPhone) {
this.contactPhone = contactPhone;
}
// public CarrierAppointment getCarrier() {
// return carrier;
// }
//
// public void setCarrier(CarrierAppointment carrier) {
// this.carrier = carrier;
// }
//
public Long getCarrier() {
return carrier;
}
public void setCarrier(Long carrier) {
this.carrier = carrier;
}
public String getContactTable() {
return contactTable;
}
Модель назначения несущей:
@Entity
@Table(name="CarrierAppointment")
@EntityListeners(AuditingEntityListener.class)
public class CarrierAppointment {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "CarrierAppointmentId")
private Long id;
private String parentCompanyCarrier;
private String writingCompany;
private String masterAgencyCode;
private String serviceCenterCode;
private String affiliateSubcode;
private String clMarketingContact;
private String plMarketingContact;
private String clUnderwriterContact;
private String plUnderwriterContact;
private String plAccountManager;
private String clAccountManager;
private String supportDesk;
private String licensingDept;
private String custServiceDept;
private String loginPasswordRequirements;
private String quotingWebsite;
private String states;
private String appetite;
private String affiliateUseOfLogo;
private String premiumVolumeRequirementForAffiliateSubcode;
private String notes;
private String knownForPersonal;
private String knownForCommercial;
private String linesOfBusiness;
@CreatedDate
private LocalDateTime createdDate;
@LastModifiedDate
private LocalDateTime lastModifiedDate;
private Boolean carrierDownloads;
@OneToMany(
cascade = CascadeType.ALL
)
@JoinColumn(name = "carrier")
private List<Contact> contactList= new ArrayList<>();
public List<Contact> getContactList() {
return contactList;
}
public void setContactList(List<Contact> contactList) {
this.contactList = contactList;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getParentCompanyCarrier() {
return parentCompanyCarrier;
}
public void setParentCompanyCarrier(String parentCompanyCarrier) {
this.parentCompanyCarrier = parentCompanyCarrier;
}