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

时间:2015-04-02 16:48:32

标签: java jspresso

在我的Jspresso应用程序中,我有一个startDateendDate的实体。 我已在此实体上创建了一个过滤器模块,其中搜索了用户必须输入的validityDate。生成的查询应返回此validityDate介于{{1}之间的实体列表}和startDate。 所以我自定义了查询,这很有效。

不幸的是,过滤视图会显示搜索运算符(endDatevalidityDate< ...)之前的>字段,这与我的情况无关;所以我只是忽略查询中的运算符。

我想隐藏视图中的运算符,只有日期选择器。

1 个答案:

答案 0 :(得分:0)

我认为使用当前的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。