Проблема: У меня есть таблица заказа на поставку и таблица Country, основной ключ которой является внешним ключом в моей таблице PO. На переднем конце у меня есть форма (angularJS), используемая для создания нового ПО с кучей полей и около 9 полей раскрывающихся списков, где пользователь может выбрать любую информацию, необходимую для ПО. Для примера я воспользуюсь раскрывающимся списком Страна. (Все выпадающие списки заполняются из БД).Выпадающий список Spring MVC, Angular AngularJS ManyToOne
Проблема, которая у меня есть, связана с настойчивостью. После отправки формы, если я использую отладчик, и я проверяю объект «Заказ на поставку», который передается службе, все мои объекты drop downs имеют значение NULL, за исключением других нормальных полей ввода, которые принадлежат к таблице PO.
Я думаю, проблема в угловом, если я проверяю вкладку сети в своем браузере Chrome в рамках инструментов разработчика, я вижу, что страна передается как countryData: 2. Дело в том, что я новичок в Angular, поэтому на этом этапе я немного запутался в том, как я должен справиться с этим, поскольку данные поступают из раскрывающегося списка и как я должен вернуть объект страны. Здесь http://tinypic.com/r/2rd9pxl/8 Я поставил снимок экрана моей сетевой вкладки из браузера, в котором отображаются данные, которые публикуются.
занесения выпадающий список стран
<div class="control-group">
<label class="control-label">*Country</label>
<div class="input-append">
<div data-ng-init="getCountryDataFromServer()">
<b>Person Data:</b> <select id="countryData" ng-model="contact.countryData">
<option value="">-- Select Countries --</option>
<option data-ng-repeat="country in countries" value="{{country.countryId}}">{{country.countryname}}</option>
</select><br>
</div>
</div>
<div class="input-append">
<label>
<span class="alert alert-error"
ng-show="displayValidationError && newContactForm.countryData.$error.required">
<spring:message code="required"/>
</span>
</label>
</div>
</div>
Модель
@Entity
@Table(name = "PURCHASEORDER",schema = "POTOOL")
@Audited
public class PurchaseOrder {
@Id
@GeneratedValue
private int id;
private String tower;
private Double revenue;
//other properties of the PO
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name = "country_id")
private Country country;
//Other ManyToOne relationships
//Getter and setters
Контроллер
@RequestMapping(method = RequestMethod.POST, produces = "application/json")
public ResponseEntity<?> create(@ModelAttribute("contact") PurchaseOrder purchaseOrder,
@RequestParam(required = false) String searchFor,
@RequestParam(required = false, defaultValue = DEFAULT_PAGE_DISPLAYED_TO_USER) int page,
Locale locale) {
purchaseOrderServiceImpl.save(purchaseOrder);
if (isSearchActivated(searchFor)) {
return search(searchFor, page, locale, "message.create.success");
}
return createListAllResponse(page, locale, "message.create.success");
}
служба
public void save(PurchaseOrder purchaseOrder) {
purchaseOrderRepository.save(purchaseOrder);
}
Repository
public interface PurchaseOrderRepository extends
PagingAndSortingRepository<PurchaseOrder, Integer> {
}
DTO - решение. Спасибо что подметил это. Я добавил DTO в свой контроллер и оттуда магия .... – user2342259