Spring表单映射到数组

时间:2013-04-30 08:58:39

标签: java spring-mvc mapping

美好的一天。 我在客户端得到了一份表格。在那种形式,我有很多行。每行包含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 个答案:

答案 0 :(得分:10)

你必须在clientside / html上使用索引。

<input name="arrData[0].id" />
<input name="arrData[0].amount" />
<input name="arrData[0].date" />

每次添加行时都必须增加索引。 除非你不删除一行,否则它会像这样工作。

我想你允许你的客户删除行,所以这不可避免地会在索引之间产生差距。但是您不必在客户端修复此问题,在模型到达控制器后,您可以过滤arrData以获取NULL引用。

@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();

}

答案 1 :(得分:1)

是的,这是可能的。

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

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

这样您就可以在客户端动态构建绑定

在服务器端,您需要注释变量:

public ModelAndView getList(HttpServletRequest req, 
                            @RequestParam FormStruct formStruct)

答案 2 :(得分:0)

您可以要求客户根据JSON发送数据,您可以使用JSON De/Serializer 转换为 Java 对象