在 Jspresso 中创建一个过滤视图,其中包含一个没有比较运算符的日期选择器
Creating a filter view in Jspresso containing a date picker without comparison operators
在我的 Jspresso 应用程序中,我有一个包含 startDate
和 endDate
的实体。
我在这个实体上创建了一个过滤器模块,搜索用户必须输入的 validityDate
。生成的查询应该 return 这个 validityDate
所在的实体列表在 startDate
和 endDate
之间。
所以我自定义了查询,效果很好。
不幸的是,过滤器视图显示 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。
在我的 Jspresso 应用程序中,我有一个包含 startDate
和 endDate
的实体。
我在这个实体上创建了一个过滤器模块,搜索用户必须输入的 validityDate
。生成的查询应该 return 这个 validityDate
所在的实体列表在 startDate
和 endDate
之间。
所以我自定义了查询,效果很好。
不幸的是,过滤器视图显示 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。