JHipster:使用标准过滤实体 - 意图使用Angular客户端方法

时间:2017-11-05 01:17:26

标签: angular jhipster

我最近开始使用JHipster - 感谢这个梦幻项目的维护者!

在当前版本的JHipster(编写本文时为4.10.2)中,实体可以通过实体子生成器启用过滤,或者通过将filter EntityNameservice EntityName with serviceClass包含到项目的JDL中文件。这将生成一个Spring项目,其中getAllEntities()类中的EntityNameResource方法采用从Criteria参数构造的GET参数。

这与为端点生成的Swagger UI开箱即用,此UI发出的查询表明后端希望每个条件都采用GET参数键的形式 - 值对;这与the 4.10.2 Filtering docs一致。

然而,我想知道是否有一种预期的方法可以从我错过的前端Angular项目中使用它,除了自己进行适当的修改以构建一致的URL。

前端服务使用静态函数createRequestOption(req)(从app/shared/model/request-util.ts导出)来填充GET参数以进行分页和排序。此函数还期望传入的req对象可能具有query属性;最初,我认为填充此参数是使用后端过滤的预期方式。

但是,createRequestOption(req)的实施目前将req.query的值放入名为GET的{​​{1}}参数中;即,这不会产生后端预期的查询格式,后者需要为每个标准单独的query参数。

我使用的解决方案是修改GET以期望一组键值对象而不是createRequestOption(req)(我称之为req.query),并添加这些到req.criteria的数组(它必须是数组,而不是地图,因为可能有多个具有相同键的参数,例如URLSearchParams)。

所以我改变了:

name.in=Megatron&name.in=Optimus

为:

params.set('query', req.query);

...使用组件代码按以下行填充数组:

if (req.criteria && req.criteria.length > 0) {
    req.criteria.forEach((criterion) => {
        params.append(criterion.key, criterion.value);
    });
}

我刚刚创建了一个实际工作的示例,其中一些表单字段使用GitLab here中的此方法过滤测试单实体单片应用(目前仅等于查询)。

所以,我的问题是:

  • 我是否错过了使用当前JHipster版本执行此操作的预期方式?
  • let criteria = [ {key: 'name.equals', value: 'Optimus'}, {key: 'power.equals', value: '10'} ]; this.entityService.query({ page: this.page - 1, size: this.itemsPerPage, sort: this.sort(), criteria }); 当前实施中req.query的用途是什么?
  • 这个区域预计会在即将推出的版本中发生变化吗?例如,前端搜索字段是否可以按启用ElasticSearch的应用程序的方式自动生成(但是对于每个实体属性)?

非常感谢。

1 个答案:

答案 0 :(得分:5)

我在我的项目中也做了非常相似的事情,在我的解决方案中,标准使用如下:

let criteria = {
   'name.equals' : 'Optimus',
   'power.equals' : '10'
};

目前,我正致力于“自动完成”工作。字段,将使用标准,并具有request-util.ts的必要扩展。这里: https://github.com/jhipster/generator-jhipster/pull/6618

是的,我认为,那个'查询的参数'方法有点混乱,需要简化一点。

也许,我们可以生成' EntityCriteria.java的客户端版本' entity-criteria.ts',但我不确定。不断推动新功能,减少代码,我能理解。