我想将模型数据列表发送到 springMVC。

基本思想是:

  • 创建一个包装器 Java POJO 以包含一个目标 POJO 列表作为一个字段。
  • 然后使用@ModelAttribute获取请求参数。

一个。以下代码运行良好:

HTML 代码: (单个模型的)

<tr> 
    <td>id:</td> 
    <td><input type="text" id="sportsFieldList[0].id" name="sportsFieldList[0].id" /></td> 
</tr> 
<tr> 
    <td>name:</td> 
    <td><input type="text" id="sportsFieldList[0].name" name="sportsFieldList[0].name" /></td> 
</tr> 
<tr> 
    <td>location:</td> 
    <td><input type="text" id="sportsFieldList[0].location" name="sportsFieldList[0].location" /></td> 
</tr> 
<tr> 
    <td>description:</td> 
    <td><input type="text" id="sportsFieldList[0].description" name="sportsFieldList[0].description" /></td> 
</tr> 

SportsFieldListWrapper.java:

import java.util.List; 
 
import xxx.SportsField; 
 
public class SportsFieldListWrapper { 
    private List<SportsField> sportsFieldList; 
 
    public List<SportsField> getSportsFieldList() { 
        return sportsFieldList; 
    } 
 
    public void setSportsFieldList(List<SportsField> sportsFieldList) { 
        this.sportsFieldList = sportsFieldList; 
    } 
} 

Controller 方法:

public @ResponseBody Map<Object, Object> batchAdd(@ModelAttribute SportsFieldListWrapper sflWrapper) { 
} 

运动场.java:

// Just a simple POJO 
public class SportsField { 
    private Long id; 
    // more fields 
 
    // getter & setter 
} 

B.当我尝试使其通用时,它停止工作了。

我试图创建一个可重用的通用版本的包装器,以避免为每种类型创建一个包装器。

ListParamWrapper.java:

import java.util.List; 
 
public class ListParamWrapper<T> { 
    private List<T> paramList; 
 
    public List<T> getParamList() { 
        return paramList; 
    } 
 
    public void setParamList(List<T> paramList) { 
        this.paramList = paramList; 
    } 
} 

Controller 方法:

public @ResponseBody Map<Object, Object> batchAdd(@ModelAttribute ListParamWrapper<SportsField> listWrapper) { 
} 

HTML 代码: (单个模型的)

<tr> 
    <td>id:</td> 
    <td><input type="text" id="paramList[0].id" name="paramList[0].id" /></td> 
</tr> 
<tr> 
    <td>name:</td> 
    <td><input type="text" id="paramList[0].name" name="paramList[0].name" /></td> 
</tr> 
<tr> 
    <td>location:</td> 
    <td><input type="text" id="paramList[0].location" name="paramList[0].location" /></td> 
</tr> 
<tr> 
    <td>description:</td> 
    <td><input type="text" id="paramList[0].description" name="paramList[0].description" /></td> 
</tr> 

获取错误:

org.springframework.beans.InvalidPropertyException: Invalid property 'paramList[0]' of bean class [com.sportslight.entity.ListParamWrap per]: Index of out of bounds in property path 'paramList[0]'; nested exception is java.lang.IndexOutOfBoundsException: Index: 0, Size: 0

我已经在 Google 上搜索过,当列表大小 > 256 时,可能会出现类似的错误,但事实并非如此,在测试中列表大小仅为 2。


问题:

  • 是什么导致了这个问题?是泛型的原因吗?在这种情况下,Spring 无法正确创建对象?
  • 如何避免为每种类型创建包装类?

请您参考如下方法:

错误信息意味着 paramList 是空的,即使你认为它的大小是 2。

您没有显示实例化 Wrapper 的代码,所以我无法给出为什么它是空的提示。


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!