在 Jspresso 中创建一个过滤视图,其中包含一个没有比较运算符的日期选择器

Creating a filter view in Jspresso containing a date picker without comparison operators

在我的 Jspresso 应用程序中,我有一个包含 startDateendDate 的实体。 我在这个实体上创建了一个过滤器模块,搜索用户必须输入的 validityDate。生成的查询应该 return 这个 validityDate 所在的实体列表在 startDateendDate 之间。 所以我自定义了查询,效果很好。

不幸的是,过滤器视图显示 validityDate 字段前面有搜索运算符(<>between…),这与我的情况无关;所以我只是忽略了查询中的运算符。

我想在视图中隐藏运算符,以便只有日期和日期选择器。

我认为使用当前的 Jspresso 版本(截至目前为 4.0.7)无法轻松实现。问题是负责将可比较的标量属性分解为 (comparator, min, max) 过滤结构的代码嵌套太深,无法使用依赖注入来覆盖它:

以下方法:

protected boolean isPropertyFilterComparable(
      IPropertyDescriptor propertyDescriptor) {
    return propertyDescriptor instanceof INumberPropertyDescriptor
        || propertyDescriptor instanceof IDatePropertyDescriptor
        || propertyDescriptor instanceof ITimePropertyDescriptor
        || propertyDescriptor instanceof IDurationPropertyDescriptor;
}

位于 RefQueryComponentDescriptor class 中,其实例由 BasicQueryComponentDescriptorFactory 在运行时构建,但在私有方法中(即 createOrGetQueryComponentDescriptor)。因此,即使您可以注入自己自定义的 BasicQueryComponentDescriptorFactory 实例,您也必须 copy/paste 太多代码才能到达 isPropertyFilterComparable 方法。

由于您的用例完全有效,我建议您在 Jspresso GitHub.

上创建增强请求

一种不太直接但更通用的方法可能是打开各种可比较的属性(数字、日期、时间和持续时间)进行额外的自定义,以便告诉 Jspresso 在这些属性时是否生成比较器结构已添加到过滤器视图中。

类似于:

date 'validityDate', filterComparable:true

但这需要更改 SJS DSL。