【问题标题】:How to add multiple array values in Grails如何在 Grails 中添加多个数组值
【发布时间】:2013-07-18 05:35:29
【问题描述】:

在数据库中提交多个值时出现错误 错误:IndexOutofBond

<form action="emp/forsubmit" method=" post">
   <input id="emp[0].name" name="emp[0].name"  type="text"/>
   <input id="emp[0].lastname" name="emp[0].lastname"  type="text"/>
<input id="emp[1].name" name="emp[1].name"  type="text"/>
<input id="emp[1].lastname" name="emp[1].lastname"  type="text"/>
</form>

我使用 MongoDb 作为 Db

控制器源代码:

def update(){

if(empInstance.getEmp_history() == null || empInstance.getEmp_history().size() == 0) {
            empInstance.setEmp_history(new ArrayList<EmpHistory>());
            empInstance.getEmp_history().add(new EmploymentHistory());
        }
 empInstance.properties = params
}

【问题讨论】:

  • 它与昨天发布的this 问题有何不同?
  • 两种形式都是一样的......在昨天的形式中,我试图直接提交数组“emp [1]”的第二个对象......这次我试图同时提交两个对象“emp[0] 和 emp[1]”.. 但它仍然给我同样的错误
  • @user2446714:提交表单不会导致数据库错误。您应该显示一些控制器代码。
  • 这是什么鬼? name=id="..."

标签: grails grails-2.0 grails-controller


【解决方案1】:

使用同名属性值:

First: <input type="text" name="firstname"/>
First: <input type="text" name="lastname"/>

Second: <input type="text" name="firstname"/>
Second: <input type="text" name="lastname"/>

当表单被提交时,它们将被 grails 处理为一个数组,然后为每个循环填充你的域对象:

params.firstname.eachWithIndex { value, index ->
     // use index to access the values in other array
     // params.lastname[index]
     def mydomain = new MyDomain()
     mydomain.firstname = value
     mydomain.lastname  = params.lastname[index]
     mydomain.save()
}

【讨论】:

    【解决方案2】:

    使用同名属性值:

    First: <input type="text" name="firstname"/>
    First: <input type="text" name="lastname"/>
    
    Second: <input type="text" name="firstname"/>
    Second: <input type="text" name="lastname"/>
    

    即使元素只有一个,下面的代码也可以工作,并且在提交表单时它们将被 grails 处理为一个数组,然后为每个循环填充您的域对象:

    def firstName = params.list('firstname')   
    def lastName = params.list('lastname') 
    firstName.eachWithIndex { value, index ->
         // use index to access the values in other array
         // params.lastname[index]
         def mydomain = new MyDomain()
         mydomain.firstname = value
         mydomain.lastname  = lastName[index]
         mydomain.save()
    }
    

    【讨论】:

      猜你喜欢
      • 2014-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 2019-05-30
      相关资源
      最近更新 更多