Spring表单映射到数组

3

你好。我有一个客户端表单,其中包含若干行。每一行都包含3个字段(日期、ID和金额)。客户端可以使用 JavaScript 添加行,因此服务器端不知道会有多少行。

我需要将这个表单映射到代表这些数据的类中。

public class RowStruct
{
    private Long id;
    private Double amount;
    private Date date;

}
public class FormStruct
{
    private ArrayList<RowStruct> arrData;
{

所以我需要将表单中的数据映射到FormStruct对象中。
@RequestMapping("/send")
public ModelAndView getList(HttpServletRequest req,FormStruct formStruct)
{
    ModelAndView model = new ModelAndView();

}

我能够翻译这句话,“是否可能并且如何实现?”

3个回答

12

你需要在客户端/HTML上使用索引。

<input name="arrData[0].id" />
<input name="arrData[0].amount" />
<input name="arrData[0].date" />
每次添加行时,您都需要增加索引。除非您不删除行,否则它将像这样工作。
我想您允许客户删除行,因此这不可避免地在索引之间创建间隙。但是,您不必在客户端上修复此问题,在模型到达控制器后,您可以为NULL引用过滤arrData。
@RequestMapping("/send")
public ModelAndView getList(HttpServletRequest req,FormStruct formStruct)
{
    Iterator<RowStruct> it = formStruct.getArrData().iterator();
    while (it.hasNext()) {
        if (it.next() == null)
            it.remove();
    }
    ModelAndView model = new ModelAndView();

}

在许多答案之后,你用点号"."拯救了我的一天 :) - keroles Monsef

1

是的,这是可能的。

在html中,您可以使用索引:

<input id='arrData[0].id' ...

这样你可以在客户端动态构建绑定。
在服务器端,您需要注释变量:
public ModelAndView getList(HttpServletRequest req, 
                            @RequestParam FormStruct formStruct)

Spring Boot是否也会逐个验证每个对象的字段? - TheRealChx101

0

好的。那是一个解决方案。那么我如何从我的表单创建JSON?是否有一种自动使用表单字段名称的方法来完成它,或者我需要获取我的表单行并手动将它们添加到我的JSON中? - user2160696
这个链接 https://dev59.com/dmsz5IYBdhLWcg3wADW6 应该会有所帮助。 - sanbhat
那是一个解决方案,但是并不必要,因为Spring能够绑定到集合! - marco.eig

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接