我认为使用当前的 Jspresso 版本(截至目前为 4.0.7)不容易实现。问题是负责将可比较的标量属性分解为(比较器,最小值,最大值)过滤结构的代码嵌套太深,无法使用依赖注入覆盖:
以下方法:
protected boolean isPropertyFilterComparable(
IPropertyDescriptor propertyDescriptor) {
return propertyDescriptor instanceof INumberPropertyDescriptor
|| propertyDescriptor instanceof IDatePropertyDescriptor
|| propertyDescriptor instanceof ITimePropertyDescriptor
|| propertyDescriptor instanceof IDurationPropertyDescriptor;
}
位于RefQueryComponentDescriptor
其实例在运行时由BasicQueryComponentDescriptorFactory
私有方法(即createOrGetQueryComponentDescriptor
)构造的类中。因此,即使您可以注入自己的自定义实例BasicQueryComponentDescriptorFactory
,也必须复制/粘贴太多代码才能访问该isPropertyFilterComparable
方法。
由于您的用例完全有效,我建议您在Jspresso GitHub上创建一个增强请求。
一种不太直接但更通用的方法可能是打开各种可比较的属性(数字、日期、时间和持续时间)以进行额外的自定义,以便在将这些属性添加到过滤器中时告诉 Jspresso 是否生成比较器结构看法。
就像是 :
date 'validityDate', filterComparable:true
但这需要更改 SJS DSL。