2015-06-05 70 views
0

我正在開發一個應用程序,前端部分使用AngularJS,後端使用Spring。AngularJS Spring排序字段名稱

我主要有兩個實體類:

@Entity 
public class Project implements Serializable { 

private static final long serialVersionUID = 1L; 


/** 
* idProject 
*/ 
@Id 
@GeneratedValue(strategy=AUTO, generator="PROJECT_SEQ")  
private Integer idProject; 


/** 
* name 
*/ 
@Column(name="PROJECT_NAME") 
private String name; 


/** 
* date 
*/ 
@Column(name="PROJECT_DATE") 
private Date date; 


/** 
* technology 
*/ 
@ManyToOne(fetch=FetchType.EAGER) 
@JoinColumn(name="ID_TECHNOLOGY", nullable=true) 
@ForeignKey(name = "FK_PROJECT_TECHNOLOGY") 
private Technology technology; 

@Entity 
public class Technology implements Serializable { 

/** 
* idTechnology 
*/ 
@Id 
@Column(name="ID_TECHNOLOGY", length=2) 
private Integer idTechnology; 


/** 
* ID = 0 ==> "TechA" 
* ID = 1 ==> "TechB"; 
* ID = 2 ==> "TechC"; 
* ID = 3 ==> "TechD"; 
* ID = 4 ==> "TechE" 
*/ 
@Column(name="TECHNOLOGY", length=30) 
private String technology; 

我想要做的是,爲AngularJS應用提供的項目名單。

對於我創建了一個控制器:

@Autowired 
private ProjectAssembler projectAssembler; 

@RequestMapping(method = RequestMethod.GET, produces = "application/json") 
@ResponseBody 
public PagedResources<ProjectResource> findAll(
    @PageableDefault Pageable page, 
    PagedResourcesAssembler<Project> assembler) { 

    //Request 
    Page<Project> projectPage = projectRepo.findAll(page); 

    PagedResources<ProjectResource> resources = assembler.toResource(projectPage, projectAssembler); 
    return resources; 
} 

正如你所看到的,我使用HATEOAS用於創建JSON資源列表,並提供瀏覽鏈接。除此之外,我正在使用推土機將Project類映射到ProjectAssembler中的ProjectResource類。

public class ProjectResource extends ResourceSupport { 

private Integer idProject; 
private String projectName; 
private Date projectDate; 
private String technologyName; 

和彙編

@Component 
public class ProjectResourceAssembler extends ResourceAssemblerSupport<Project, ProjectResource> { 

@Autowired 
private Mapper dozerBeanMapper; 

public ProjectResourceAssembler() { 
    super(ProjectController.class, ProjectResource.class); 
} 

@Override 
public ProjectResource toResource(Project entity) { 
    ProjectResource resource = createResourceWithId(entity.getIdProject(), entity); 
    return resource; 
} 

@Override 
protected ProjectResource instantiateResource(Project entity) { 
    return dozerBeanMapper.map(entity, ProjectResource.class); 
} 

} 

的目標是,我想在前端應用AngularJS不同領域的名稱,在後端。 例如,ProjectResources字段是前端中項目表列的列。

我的問題是當我想在angularjs應用中使用排序,我使用前端字段名稱,當我想要過濾時,所以當控制器接收到頁面屬性時,它不知道排序的字段。

我的問題是:你有任何建議,以幫助我使用排序?

回答

0

爲了真正符合HATEOAS標準,服務(spring)需要向客戶端提供所有超媒體控件(鏈接)以執行排序。客戶端不應該按照某個數據字段進行排序......它只應按服務器向客戶端提供的排序選項進行排序。這種排序本身可能是結果的所有數據字段,但這只是偶然的用例。

這樣服務可以在每個鏈接中嵌入排序規則。排序規則可以包含後端列名稱。排序url本身對客戶端來說是不透明的。

我意識到這並不能給你一個直接的答案,但你應該能夠使用鏈接生成器來創建適當的排序鏈接並返回它們。