zoukankan      html  css  js  c++  java
  • SpingMVC实现集合参数(Could not instantiate bean class [java.util.List])

    需求,要求批量新增或者修改一个List,在springMVC中是不支持下面代码的写法:

    @RequestMapping(value = "/update", method = RequestMethod.POST)
    public String update(List<ProductCollocation> productCollocations ,HttpServletRequest request, RedirectAttributes redirectAttributes) {
      for (ProductCollocation productCollocation : productCollocations) {
        productCollocation.setModifyDate(DateUtil.getDate());
        productCollocationService.update(productCollocation, "create_date","product","collocation","description");
      }
      addFlashMessage(redirectAttributes, SUCCESS_MESSAGE);
      return "redirect:list.jhtml";
    }

    这样写会抛出如下异常:

    nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [java.util.List]: 

    是否其实也很简单,Spring MVC 需要支持Form表单对象的方式映射,使用get set器来填充对象。

    新增一个Form

    public class ProductCollocationForm {
        List<ProductCollocation> productCollocations;
    
        /**
         * @return the productCollocations
         */
        public List<ProductCollocation> getProductCollocations() {
            return productCollocations;
        }
    
        /**
         * @param productCollocations the productCollocations to set
         */
        public void setProductCollocations(List<ProductCollocation> productCollocations) {
            this.productCollocations = productCollocations;
        }
    }

    再使用Form来set对象

    @RequestMapping(value = "/update", method = RequestMethod.POST)
    public String update(ProductCollocationForm productCollocationForm ,HttpServletRequest request, RedirectAttributes redirectAttributes) {
        for (ProductCollocation productCollocation : productCollocationForm.getProductCollocations()) {
          productCollocation.setModifyDate(DateUtil.getDate());
          productCollocationService.update(productCollocation, "create_date","product","collocation","description");
        }
        addFlashMessage(redirectAttributes, SUCCESS_MESSAGE);
        return "redirect:list.jhtml";
    }

    前台就能够使用索引的方式对后台对象设置值了

    <td>
      <input type="text" name="productCollocations[${productCollocation_index}].displayName" class="text" maxlength="200"  style="100px"  value="${productCollocation.displayName}"/>
      <input type="hidden" name="productCollocations[${productCollocation_index}].id" class="text" maxlength="200" value="${productCollocation.id}"/>
    </td>

    上面页面中name的值为:productCollocations[${productCollocation_index}].displayName,其实也相当于productCollocations[0].displayName、productCollocations[1].displayName类似这种的写法

  • 相关阅读:
    Interviewe(hdu3486)
    Cornfields(poj2019)
    C. Watching Fireworks is Fun(Codeforces 372C)
    A. Points on Line
    Fence(poj1821)
    7
    如何使用Visual Studio调试C#程序
    do…while语句
    通过ASP.NET Ajax技术模拟实现NBA比赛文字直播功能
    RecyclerView的基础用法
  • 原文地址:https://www.cnblogs.com/henuyuxiang/p/6693457.html
Copyright © 2011-2022 走看看