0

Я разрабатываю приложение, использующее AngularJS для передней части и Spring для внутреннего блока.AngularJS Название поля сортировки весов

У меня есть в основном два класса объектов:

@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 ресурсов и предоставление ссылок просмотра. В дополнение к этому я использую dozer для сопоставления класса Project с классом ProjectResource в ProjectAssembler.

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, служба (весна) должна предоставить клиенту все элементы управления гиперссылками (ссылки) для выполнения сортировки. Клиент не должен сортировать по некоторому полю данных ... он должен сортировать только через какие параметры сортировки предоставляются клиенту сервером. Эта сортировка сама по себе может представлять собой все поля данных результата, но это только случайный случай использования.

Таким образом, служба может встраивать правила сортировки в каждую ссылку. Правило сортировки может содержать имя бэкэнд-столбца. Сам URL-адрес сортировки непрозрачен для клиента.

Я понимаю, что это не дает вам прямого ответа, но вы должны иметь возможность использовать компоновщик ссылок для создания ссылок на сортировку по мере необходимости и возвращать их.

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

  • Нет связанных вопросов^_^