我在实体的高级搜索中实现了一个自定义 BaseStore 过滤器(这个实体是一个报告,通过过滤我们选择的 basestore 的 pk 上的结果来执行查询)打开一个参考搜索,我最多可以选择三个 BaseStore . 我遇到的问题是,当我去删除现有条件(BaseStore1,BaseStore2 ecc)以执行另一次搜索(BaseStore6,BaseStore7 ecc..)时,它们仍保留在内存中。我没有像往常一样开发适配器,这是因为我已经有了查询,因为这个实体是一个报告,因此我用这些方法修改了 AdvancedSearchController:
public void customAddFilterQueryRawCondition(final AdvancedSearchData searchData, final List models)
{
if (CollectionUtils.isNotEmpty(models) && models.stream().noneMatch(x -> !(x instanceof BaseStoreModel)))
{
customCleanUpOutdatedConditions(searchData);
List<String> baseStorePk = ((List<BaseStoreModel>) models).stream()
.map(bs -> bs.getPk())
.map(PK::toString)
.collect(Collectors.toList());
String inCondition = baseStorePk.stream()
.collect(Collectors.joining(", "));
FieldType fieldType = new FieldType();
fieldType.setDisabled(Boolean.TRUE);
fieldType.setSelected(Boolean.TRUE);
fieldType.setName(ProductStockAvailabilityLogisticReportModel.BASESTOREPK);
searchData.addCondition(fieldType, ValueComparisonOperator.IN, inCondition);
}
}
public void customCleanUpOutdatedConditions(final AdvancedSearchData searchData)
{
final List<SearchConditionData> pkBaseStoreConditions = searchData
.getFilterQueryRawConditions("baseStorePk");//orProductStockAvailabilityLogisticReportModel.BASESTOREPK // but the debug revelated that "null"
if (CollectionUtils.isNotEmpty(pkBaseStoreConditions))
{
final List<SearchConditionData> outdatedConditions = pkBaseStoreConditions
.stream()
.filter(conditionData -> ProductStockAvailabilityLogisticReportModel.BASESTOREPK
.equalsIgnoreCase(conditionData.getFieldType().getName()))
.collect(Collectors.toList());
pkBaseStoreConditions.removeAll(outdatedConditions);
}
}