我有一个小型的Spring MVC Web项目(使用标准的JSP作为视图引擎),我决定,如果布尔值可以显示为“是”或“否”,那就太好了-我认为这看起来更友好而不是“ true”和“ false”。因此,我创建了一个自定义BooleanFormatter
来为我执行此操作。到目前为止,一切都很好。
但是,当将布尔字段呈现为复选框时,Spring会执行以下操作来确定是否应选中该复选框:
Boolean.valueOf
的结果。当然,Boolean.valueOf("yes")
是false
,因此复选框永远不会显示为选中状态。
这是个问题。
是否有一种方法可以告诉Spring在显示值时(而不是在呈现(或解析其值时))编辑器时仅使用格式化程序??
(我正在寻找类似于ASP.NET MVC的DisplayTemplate vs EditorTemplate或DisplayFormat.ApplyFormatInEditMode
的东西)
或者,我是完全按照错误的方式来做这件事吗?
答案 0 :(得分:0)
我研究了AbstractPropertyBindingResult
的代码,以了解对Spring checkbox JSP Tag is broken when using Converter for type Boolean的答案为何起作用。这是呈现复选框/其他输入时使用的代码:
protected Object formatFieldValue(String field, @Nullable Object value) {
String fixedField = fixedField(field);
// Try custom editor...
PropertyEditor customEditor = getCustomEditor(fixedField);
if (customEditor != null) {
customEditor.setValue(value);
String textValue = customEditor.getAsText();
// If the PropertyEditor returned null, there is no appropriate
// text representation for this value: only use it if non-null.
if (textValue != null) {
return textValue;
}
}
if (this.conversionService != null) {
// Try custom converter...
TypeDescriptor fieldDesc = getPropertyAccessor().getPropertyTypeDescriptor(fixedField);
TypeDescriptor strDesc = TypeDescriptor.valueOf(String.class);
if (fieldDesc != null && this.conversionService.canConvert(fieldDesc, strDesc)) {
return this.conversionService.convert(value, fieldDesc, strDesc);
}
}
return value;
}
在数据绑定期间,遵循类似的过程
PropertyEditor
。Converter
/ Formatter
因此:
PropertyEditor
。Formatter
或Converter
,但也可以使用PropertyEditor
来执行默认行为。