获取模型中的对象列表并实现ng-repeat

时间:2014-10-02 09:13:33

标签: java angularjs hibernate

我有一个webapp和两个我想使用的模型。一个模型是学员,另一个是TraineeStatus。我想在Trainees中获取一个数组或TraineeStatus列表,然后将其传递给AngularJS视图,在select方法中显示它,最好的方法是什么?

Trainees.java

@Entity
public class Trainees {

    @Id
    @GeneratedValue
    private int traineesID;
    private int groupsID;
    @ManyToOne
    private TraineeStatus traineestatus;
    private int customersID;
    private String name;
    private String surname;
    private String phoneDetails;
    private String email;

    public Trainees(){

    }

    public Trainees(String name, String surname, String phoneDetails, String email, int id, int groupsID, TraineeStatus traineestatus, int customersID) {
        super();
        this.name = name;
        this.surname = surname;
        this.email = email;
        this.phoneDetails = phoneDetails;
        this.groupsID = groupsID;
        this.traineestatus = traineestatus;
        this.customersID = customersID;
    }

    //getters and setters

    @Override
    public boolean equals(Object object) {
        if (object instanceof Trainees){
            Trainees contact = (Trainees) object;
            return contact.traineesID == traineesID;
        }

        return false;
    }

    @Override
    public int hashCode() {
        return traineesID;
    }
}

TraineeStatus.java

@Entity
@Table(name="traineeStatus")
public class TraineeStatus {

    @Id
    @GeneratedValue
    private int traineeStatusId;
    private String value;

    public TraineeStatus(){

    }

    public TraineeStatus(String value, int id) {
        super();
        this.value = value;
    }

    //getters and setters

    @Override
    public boolean equals(Object object) {
        if (object instanceof TraineeStatus){
            TraineeStatus value = (TraineeStatus) object;
            return value.traineeStatusId == traineeStatusId;
        }

        return false;
    }

    @Override
    public int hashCode() {
        return traineeStatusId;
    }
}

我的观点:

 <div class="input-append">
                        <select
                               required
                               ng-model="contact.traineestatus"
                               name="traineestatus.id"
                               placeholder="<spring:message code='sample.status'/> ">
                        <option ng-repeat="trainee in contact.traineestatus" value="{{trainee.id}}">{{trainee.value}}</option>
                        </select>
                    </div>
                    <div class="input-append">
                        <label>
                                <span class="alert alert-error"
                                      ng-show="displayValidationError && updateContactForm.traineestatus.id.$error.required">
                                    <spring:message code="required"/>
                                </span>
                        </label>
                    </div>

目前contact.traineestatus返回一个具有id和value的对象,但我想得到一个数组。

我正在尝试使用该对象,所以我会有一个select函数,它会显示值并保存Id并将其保存在Trainees表中。

有没有办法利用这个对象并在我的选择中使用它?谢谢你!

1 个答案:

答案 0 :(得分:2)

这有点难以解释,所以我会尽量保持简单。

首先,您需要记住,TraineeStatus的列表不会在具有联系人/受训者列表的同一请求中检索,您将需要单独的HTTP请求来获取该列表。

ContactRepository获取所有Trainees条记录的方式相同,您需要TraineeStatusRepository才能获得所有TraineeStatus条记录。然后,在您的某个服务上,您需要一种方法来获取TraineeStatus列表,如下所示:

private List<TraineeStatus> findAllTraineeStatus() {
    return traineeStatusRepository.findAll();
}

之后,您需要定义一个HTTP API来访问该列表(即GET http://example.com/traineeStatus)。这个想法可能与您必须检索ContactList相同。

然后,在AngularJS应用上,您需要使用一个函数来加载TraineeStatus列表。例如:

$scope.getTraineeStatus = function () {
    // assuming the HTTP API is: GET http://example.com/traineeStatus
    $http.get('http://example.com/traineeStatus', config)
        .success(function (data) {
            $scope.traineeStatus = data;
        })
        .error(function (err) {
            // handle error
        });
}

然后遍历$scope.traineeStatus上的ng-repeat属性:

<select
       required
       ng-model="contact.traineestatus"
       name="traineestatus.id"
       placeholder="<spring:message code='sample.status'/> ">
<option ng-repeat="status in traineeStatus" value="{{status.id}}">{{status.value}}</option>
</select>