java—如何在控制器的@modelattribute中获取列表对象?

gg58donl  于 2021-07-23  发布在  Java
关注(0)|答案(1)|浏览(657)

我有以下代码。
它从数据库检索listplaces并绑定到视图。
很好用。
然后我想更新视图上的数据,单击save并将该信息提交回控制器,以便控制器使用更改更新db。
但是当我单击save时,代码并没有进入saveplaces方法。
而是抛出以下错误: No primary or default constructor found for interface java.util.List 在saveplaces方法中检索list对象需要更改什么?
实体类

@Entity
public class Place implements Serializable{

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Long idPlace;   

    @Column(length=50)
    private String place;

    public Long getIdPlace() {
        return idPlace;
    }

    public void setIdPlace(Long idPlace) {
        this.idPlace = idPlace;
    }

    public String getPlace() {
        return place;
    }

    public void setPlace(String place) {
        this.place = place;
    }

}

控制器获取方法

@RequestMapping(method = RequestMethod.GET, value = "/myplaces")
public ModelAndView initPlaces() {

    List<Place> listPlaces = placesRepository.getPlaces();

    ModelAndView modelAndView = new ModelAndView("/myplaces.html");
    modelAndView.addObject("listPlaces", listPlaces);
    return modelAndView;
}

看法

<form action="/myplaces" method="post">
<th:block th:each="place, itemStat : *{listPlaces}">                    
  <input type="text" th:value="*{listPlaces[__${itemStat.index}__].place}" />
</th:block>
<input type="submit" name="btnSave" value="Save"/>

在btnsave click上执行的控制器保存方法

@RequestMapping(value = "/myplaces", params = "btnSave", method = RequestMethod.POST)
public ModelAndView savePlaces(@ModelAttribute List<Place> listPlaces) {

    //update db code here

    ModelAndView modelAndView = new ModelAndView("/myplaces.html");
    modelAndView.addObject("listPlaces", listPlaces);
    return modelAndView;
}
ttisahbt

ttisahbt1#

使用实现 List ,例如 ArrayList 或者 LinkedList ,具有默认构造函数。 @ModelAttribute("listPlaces") ArrayList<Place> listPlaces 关于如何在spring中使用列表作为模型属性的更多信息?

相关问题