问题:我有一个Purchase Order表和Country表,其中主键是我的PO表中的外键。在前端,我有一个表单(angularJS),用于创建带有一堆字段的新PO和大约9个下拉列表字段,用户可以在其中选择PO所需的任何信息。 为了示例,我将使用Country下拉列表。 (所有下拉菜单都会从数据库中填充。)
我遇到的问题是持久性。提交表单后,如果我使用调试器并检查传递给服务的Purchase Order对象,则除了属于PO表的其他常规输入字段外,我的所有下拉对象都为空。
我认为问题是Angular,如果我在开发者工具下检查Chrome浏览器中的网络选项卡,我会看到该国家/地区正在传递为 countryData:2 。我是Angular的新手,所以在这个阶段我对如何处理这个问题感到困惑,因为数据来自下拉列表以及我应该如何返回country对象。这里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);
}
存储库
public interface PurchaseOrderRepository extends
PagingAndSortingRepository<PurchaseOrder, Integer> {
}
答案 0 :(得分:1)
我认为因为你已经定义了 ng-model =“contact.countryData”以及选项来自 value =“{{ country.countryId}}“即可。当你提交值country.countryId将去服务器,这绝对没问题。我认为你应该有转换机制,将数据从UI转换为Hibernate Entity(即PurchaseOrder)。通常DTO(数据传输对象)用于从UI获取数据,并使用我们设置为Hibernate实体的setter和getter,后者将保存该实体。 这个问题可能对你有帮助。
答案 1 :(得分:0)