spring-mvc JSR-303+form标签的验证接受list集合

JSR-303和form标签同时使用
添加
进行验证时集合的提交会将这个集合提交过去,只不过id会是空.所以需要自己在controller进行手动验证
1
如果前台使用form标签的循环循环*这样的话后端接受的是数组spring无法进行自动装载*

这样循环调用可以在controller接受是自动装载进list集合,后台才能接受对象
不过form标签会将所有对象进提交过去,只不过id会是空.所以需要自己在controller进行手动验证
spring-mvc JSR-303+form标签的验证接受list集合_第1张图片
这样循环进行验证即可
2
还有一种方式进行验证,正常的在实体类进行注解验证
在这里插入图片描述
上面说到form标签会将所有对象提交过去,不能用注解NotNull进行验证,但可以这样写
在这里插入图片描述
这样写我们循环的是原声的input标签,他不会将所有对象传入Controller,这样就可以通过注解NotNull进行验证.
不过不建议使用这种方式进行验证,应为,当你不使用form标签的的checkbox时不会帮你报错时自动选中原来选中的.
修改
然后是修改时的回显问题
这里有两种使用from标签的回显,依然是使用上面两种方式的回显
1
在这里插入图片描述
第一种正常使用from标签循环,这时会有个问题,当你的集合当中有从下标0开始的他会自动回显,但会面不会回显
因为from标签的集合的回显是按照下标对应,并且值相等时才回显
但是我们在查询时只查询已有的集合,那么在前端循环时下标肯定会对应不上,这时可以通过修改查询语句解决这个问题
spring-mvc JSR-303+form标签的验证接受list集合_第2张图片
为了不影响原来的查询界面的展示效果,重新写一个ResultMap标签,只是查询结合的select语句改变了
spring-mvc JSR-303+form标签的验证接受list集合_第3张图片
上面是原来的,下面是修改过后的,唯一不同是一个是在外连接之后加条件,一个是在连接时加条件,还有查询的sid变成了中间表的sid,这样查询的话会将所有t_star数据查出来,不过没有对应的sid会为空,这是我们前端的下标就会对应上,就可以正常回显了
注意:在根据id查询时,要使用新建的ResultMap,关于外连接之后使用where筛选条件和外连接时使用on来筛选条件,简单说一下,where是对结果返回之前行约束,而on是在连接表时设置两表连接关系,所以主表的数据会全部显示而中间表的id会出现null值,这里就不详细些了,以后有空在写

2
当我们在使用第二种添加方式进行修改的回显时,因为没有使用form标签所以不会帮你自动回显,注意这里使用第二种时不需要配置第一种的两个ResultMap,已不需要新写查询,后端所有sql不变.
当不能自动回显时要手动回显,因为我们在根据id查询对象时,ResultMao映射已经帮我们把副表集合查询好了,我们只需在前台进行循环验证即可
在这里插入图片描述
这样就行了,flag变量的作用是防止双层循环出现重复复选框的问题,

你可能感兴趣的:(java)