Spring 的表单控制器(例如SimpleFormController
或BaseCommandController
)使用命令在 HTML 表单和控制器之间传递数据。我的问题是,使用支持模型作为命令本身是常见的做法吗?或者创建一个具有与支持模型中的属性对应的属性的单独命令是否很常见。
我的问题是要使用支持模型作为命令,属性编辑器对于转换非字符串属性是必需的。想象一个具有许多非字符串强类型自定义字段类型的数据模型。在提交表单时,属性编辑器会在调用验证器之前进行转换。如果无法进行类型转换(用户输入错误),那么验证器将永远没有机会提供详细的错误消息。HTML 表单上显示的只是一般的错误消息。请参阅我相关的 Stackoverflow 问题。
另一种方法是创建一个单独的命令来复制支持模型中的每个字段,但作为一个字符串。通过这种方式,验证器可以验证每个字段的字符串表示。然后控制器onSubmit
负责将基于文本的命令转换为支持模型。从我对 Spring 的研究来看,这似乎是预期的用途。我对走这条路的犹豫是需要为每个数据模型创建单独的命令的繁琐方式。然后是必须在命令和数据模型之间编组的额外工作。让表单直接编辑支持模型并使用属性编辑器进行转换要方便得多。那么问题是验证。
所以我很好奇其他人如何处理包含自定义类型非字符串字段的基于表单的模型编辑问题。