我对如何处理申请表有疑问。我有一个表单,我需要验证所有输入是数字。我在确定与表单相关的bean的属性类型时遇到问题。我不知道是将它们设置为String还是加倍,原因如下:
在这种情况下,有没有人可以告诉我如何进行先验? 感谢。
答案 0 :(得分:3)
我建议您始终使用您的域类型而不是使用String,因为这是HTTP发送params的方式。如果某个字段的类型为double,您将在代码中使用它,并将其存储在数据库中。让Spring将请求参数转换为您需要的类型。
数据绑定对于允许用户输入动态绑定到应用程序的域模型(或用于处理用户输入的任何对象)非常有用。 Spring提供了所谓的DataBinder类来完成它。
您可以在控制器的initBinder
方法中注册这些内容,并允许您将请求中的字符串转换为所需类型。例如,请参阅用于将用户输入的数字字符串解析为Bean的Number属性的CustomNumberEditor类。然后,您可以将其与Validator interface结合使用,以进行更复杂的检查。
编辑:当转换失败时,Spring绑定使用typeMismatch
错误代码来解决绑定错误(required
代码,如果您指定了一个字段,但是您没有提供它)。在您的情况下,它默认显示异常消息。要将消息更改为更友好的消息,您必须使用typeMismatch
前缀在属性文件中提供捆绑密钥。
这由DataBinder.setMessageCodesResolver
指定,默认为org.springframework.validation.DefaultMessageCodesResolver。在javadoc的DefaultMessageCodesResolver中,您可以看到完整的示例,但基本上,您只需在属性文件中添加这样的条目:
typeMismatch.yourField=Your user friendly error message goes here
答案 1 :(得分:1)
如果在message.properties(或您正在使用的等效消息包)中有以下表单中的条目,则可以将异常映射到自定义消息。
typeMismatch.fieldName,其中fieldName将是您要验证的字段的名称。
答案 2 :(得分:0)
如果您使用的是Spring 3.0
查看覆盖带注释的默认值
的一部分<强> Spring 3 Type Conversion and Validation 强>
如果您使用的是Spring 2.x +,可以通过注册上面的帖子
中提到的Custom PropertyEditor来实现这一点。