Spring MVC-Angularjs: как связать свойство объекта

Я не понимаю, почему я получаю эту ошибку, когда пытаюсь ввести свою форму, поэтому у меня есть Invalid property ‘siteesTypeSite[idTypeSite]’ класса bean в моем веб-приложении, я пытался найти решение, но все равно не повезло.

org.springframework.beans.InvalidPropertyException: Invalid property ‘siteesTypeSite[idTypeSite]’ of bean class [model.Sites]:
Property referenced in indexed property path ‘siteesTypeSite[idTypeSite]’ is neither an array nor a List nor a Map; returned value was [2]

Что-то не так с моей картой?

Сопоставление Sites.java

public class Sites implements java.io.Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;

@JsonBackReference("site-typeSite")
@LazyCollection(LazyCollectionOption.FALSE)
@ManyToOne
@JoinColumn(name = “idTypeSite”) 
private TypeSites siteesTypeSite;
Getter/setters
}

Отображение TypeSites.java:

public class TypeSites implements java.io.Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="idTypeSite")
private int idTypeSite;

private String typeSite;

@LazyCollection(LazyCollectionOption.FALSE)
@JsonManagedReference("site-typeSite")
@OneToMany(mappedBy = “siteesTypeSite”,fetch = FetchType.LAZY) 
// private Set<Sites> sitees= new HashSet<Sites>(0);
private List<Sites> sitees = new AutoPopulatingList<Sites>(Sites.class);
Getter/setters
}

класс контроллера:

    @RequestMapping(method = RequestMethod.POST, produces = "application/json")
    public ResponseEntity<?> create(@ModelAttribute("site") @Valid Sites site,
                                    @ModelAttribute("typeSites")  TypeSites typeSites,
                                    @RequestParam(required = false) String searchFor,
                                    @RequestParam(required = false, 
                                    defaultValue = DEFAULT_PAGE_DISPLAYED_TO_USER) int page,
                                    Locale locale) {
//      TypeSites test=new TypeSites("test");
//      site.setSiteesTypeSite(typeSites);
//      Set type = new HashSet ();
//      type.add(typeSites);
        siteService.save(site);
        }

Угловой код:

$scope.createObject = function (newObjectForm) {
if (!newObjectForm.$valid) {
$scope.displayValidationError = true;
return;
}
$scope.lastAction = ‘create';
var url = $scope.url;
var config = {headers: {‘Content-Type': ‘application/x-www-form-urlencoded; charset=UTF-8′}};
$scope.addSearchParametersIfNeeded(config, false);
$scope.startDialogAjaxRequest();
$scope.sites.siteesTypeSite =JSON.parse($scope.sites.siteesTypeSite);
$http.post(url, $.param($scope.sites), config)
.success(function (data) {
$scope.finishAjaxCallOnSuccess(data, “#addObjectsModal”, false);
})
.error(function(data, status, headers, config) {
$scope.handleErrorInDialogs(status);
});
};

JSP:

<select required 
ng-model=”sites.siteesTypeSite”
name=”siteesTypeSite”
>
<option ng-repeat=”typesites in page.source” value=”{{typesites}}” >{{typesites.typeSite}}</option>
</select>

и у меня есть это перед отправкой в ​​​​браузере:

Object {codeOracle: "test", codeGSM: "test", area: "test", siteesTypeSite: Object}
area: "test"
codeGSM: "test"
codeOracle: "test"
siteesTypeSite: Object
       idTypeSite: 2
       sitees: Array[0]
       typeSite: "Public"
       __proto__: Object
__proto__: Object

Редактировать 1:

я пытался использовать MAP вот так, но та же ошибка

@LazyCollection(LazyCollectionOption.FALSE)
    @JsonManagedReference("site-typeSite")
    @OneToMany(mappedBy="siteesTypeSite")
    @MapKey//(name="typeSite")
    public Map<Integer, Sites> getSitees() {
        return sitees;
    }

Редактировать 2:

я редактирую свой класс siteType, как показано ниже, но получаю ту же ошибку:

@Entity
@Table(name = "TypeSites")
@JsonIgnoreProperties({ "hibernateLazyInitializer", "handler" })
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property="idTypeSite")
public class TypeSites implements java.io.Serializable {

    private static final long       serialVersionUID = 1L;
    private int                     idTypeSite;
    private String                  typeSite;
    //private List<Sites>           sitees = new AutoPopulatingList<Sites>(Sites.class);;
    private Map<Integer, Sites>      sitees;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name="idTypeSite")
    public int getIdTypeSite() {
        return idTypeSite;
    }
    public void setIdTypeSite(int idTypeSite) {
        this.idTypeSite = idTypeSite;
    }

    @LazyCollection(LazyCollectionOption.FALSE)
    @JsonManagedReference("site-typeSite")
    @OneToMany(mappedBy = "siteesTypeSite", cascade = CascadeType.ALL,fetch = FetchType.LAZY)
    @MapKey(name="id")
    public Map<Integer, Sites> getSitees() {
        return sitees;
    }
    public void setSitees(Map<Integer, Sites> sitees) {
        this.sitees = sitees;
    }


@SuppressWarnings("unchecked")
    public TypeSites() {
        this.sitees = MapUtils.lazyMap(new HashMap<Integer,Object>(), new Factory() {

              public Object create() {
                  return LazyList.decorate(new ArrayList<Sites>(), 
                                 FactoryUtils.instantiateFactory(Sites.class));
              }

          });
    }

person Ahmed    schedule 16.06.2015    source источник
comment
Отформатируйте блоки кода   -  person kTT    schedule 16.06.2015
comment
Исключение уже дает вам ответ path ‘siteesTypeSite[idTypeSite]’ is neither an array nor a List nor a Map. Связывание работает только для индексированных коллекций, набор не является индексированной коллекцией.   -  person M. Deinum    schedule 16.06.2015
comment
@M.Deinum, я пробовал это private List<Sites> sitees = new AutoPopulatingList<Sites>(Sites.class);, но какой-то результат @kTT, как я могу его отформатировать?   -  person Ahmed    schedule 16.06.2015
comment
Путь к вашему свойству также неверен, это должно быть число, а не имя (если только это не ключ карты). Вопрос: вы отправляете параметры JSON или запроса, если это первый @ModelAttribute, это неправильный инструмент для работы, и вам придется использовать @RequestBody, и вы можете иметь только одно тело, а не несколько.   -  person M. Deinum    schedule 16.06.2015
comment
Я отправляю Json, ты имеешь в виду собственность ведьмы? это ng-model=”sites.siteesTypeSite”, если это я пробовал это ng-model=”sites.siteesTypeSite.idTypeSite”, но та же ошибка   -  person Ahmed    schedule 16.06.2015
comment
@M.Deinum, пожалуйста, посмотрите мой вопрос редактирования edite1   -  person Ahmed    schedule 16.06.2015
comment
пожалуйста, если кто-нибудь может мне помочь, я не могу исправить эту ошибку, заранее спасибо   -  person Ahmed    schedule 17.06.2015
comment
проверьте следующую ссылку, которая поможет stackoverflow.com/questions/12339013/ stackoverflow.com/questions/12348491/   -  person Balaji Marimuthu    schedule 17.06.2015
comment
@BalajiM, пожалуйста, посмотрите мое редактирование 2, я подбирал подход к ссылке, которой вы делитесь. спасибо   -  person Ahmed    schedule 18.06.2015