2015-03-03 2 views
0

Проблема: У меня есть таблица заказа на поставку и таблица 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> { 


} 

ответ

1

Я не думаю, что есть какие-либо проблемы из-за углового, так как вы определили нг-модель = "contact.countryData" для выпадающего меню и параметр имеет значение от value = "{{country.countryId}}". Когда вы отправляете значение country.countryId, вы попадаете на сервер, который абсолютно прекрасен. Я думаю, у вас должен быть механизм преобразования, который будет преобразовывать данные из пользовательского интерфейса в Hibernate Entity (т. Е. PurchaseOrder). Обычно DTO (объект передачи данных) используется для получения данных из пользовательского интерфейса, а с помощью setter и getter мы устанавливаем объект Hibernate, а последний вы сохраните этот объект. Этот вопрос может вам помочь.

DTO to Entity And Entity to DTO

+0

DTO - решение. Спасибо что подметил это. Я добавил DTO в свой контроллер и оттуда магия .... – user2342259

0

При работе с HTML (а не с JSP), то лучше использовать @RequestBody на месте @ModelAttribute, чтобы получить полное тело данных. Пожалуйста, обратитесь к следующим ссылкам: Link 1 Link 2

+0

Я на самом деле работаю с JSP, поэтому '@ModelAttribute' более подходит – user2342259

Смежные вопросы