FilterEditor.setValue与setDisplayValue的区别及FilterType适配问题咨询
FilterEditor中setValue与setDisplayValue的区别及FilterType关联解析
核心区别
setValue(Object value):直接设置过滤器的原始数据值,值会直接参与过滤运算,完全不经过格式转换,必须和字段的底层数据类型严格匹配。setDisplayValue(String value):设置过滤器的界面显示文本,这个值会先通过FilterEditor的格式化器(Formatter)解析转换为对应数据类型,再参与过滤逻辑,适配界面输入/展示的场景。
与FilterType的关联逻辑
不同过滤类型对两个方法的处理逻辑差异明显:
- 精确匹配类(如
FilterType.EQUALS、FilterType.NOT_EQUALS):这类过滤器要求匹配严格一致的原始值,对数据类型匹配度要求极高。如果setValue传入的参数类型和字段底层类型不兼容(比如字段是Integer,你传了String类型的"123"),就会因类型不匹配导致设置失败。而setDisplayValue会自动通过Formatter把字符串转成对应数据类型,满足精确匹配的要求,所以能正常生效。 - 模糊匹配类(如
FilterType.LIKE_IGNORE_CASE、FilterType.LIKE):这类过滤器本身基于字符串模糊匹配,底层会自动把原始值转成字符串处理。不管setValue传入的是Integer还是String,都会被统一转成字符串参与匹配,因此不会出现类型问题,能正常工作。
你的问题原因解析
当设置FilterType.EQUALS时,如果你用setValue传入的是字符串类型的数值,但字段实际是数字类型(比如Integer),就会因为类型不兼容导致过滤器无法正确识别,设置失败。而setDisplayValue会自动完成类型转换,符合精确匹配的要求,所以能正常设置。
而FilterType.LIKE_IGNORE_CASE本身就是字符串模糊匹配逻辑,无论setValue传入的是什么类型,都会被转成字符串处理,因此不会出现适配问题,所以能正常工作。
内容的提问来源于stack exchange,提问作者Stefan Wurm
相关产品推荐
相关产品推荐

