Spring MVC Spring绑定-处理数字输入?

vuktfyat  于 2022-11-14  发布在  Spring
关注(0)|答案(2)|浏览(156)

我正在处理一个Webflow应用程序,在该应用程序中,我可能必须提交当前表单才能删除子记录(很抱歉,工作流很复杂)。
问题是,如果用户在表单中输入垃圾数据,然后按下“删除”按钮,绑定和/或验证将失败,表单将永远不会被提交。
因此,如果他们输入垃圾数据,他们不能删除记录。
处理用户在Web表单中输入“垃圾”数据(尤其是在数值字段中输入非数值数据)的首选方法是什么?我有一个Spring表单支持对象,如下所示:

public class MyFormInfo implements Serializable {
    private String myName;
    private Integer myNumber;
}

如果用户在myName字段中输入了垃圾,我可以在验证过程中忽略它。但是,如果用户在myNumber字段中输入了垃圾,绑定失败,我没有好的方法来捕获它,我无法提交表单。
有人有好办法解决吗?

fcy6dtqo

fcy6dtqo1#

也可以看看这个answer,但总的来说,在转换时类型不匹配的情况下,没有好的方法来添加错误消息。
可用的机制(属性编辑器、转换器、Bean验证)并不用于处理类型不匹配。
最好的解决方案可能是在客户端通过Javascript通过一些只接受数字的字段掩码来进行验证。这样在服务器上类型不匹配只会在出现bug的情况下发生,所以未处理的错误是可以接受的。
要在服务器上执行此操作,可以向DTO添加String属性,并应用Bean验证:

@Pattern(regexp = "{A-Za-z0-9}*")
 String numericField;

然后通过bean验证可以将错误消息添加到页面中,请参见此example

chy5wohz

chy5wohz2#

如果要避免在整数字段中输入小数,可以这样做:
在HTML表单中,您可以执行以下操作:

<div class="form-outline">
    <input type="number" min=1 max=100 required/>
</div>

在Java表单中,您可以执行以下操作:

@NotNull
@Max(value = 100)
@Min(value = 1)
@NumberFormat
private Integer countOfRooms = null;

相关问题