2014-01-22 3 views
2

У меня есть таблица данных, некоторые вещи, как нижеКак обновить несколько экземпляров одного и того же объекта домена в grails в одиночном 'submit'?

Id  Name  LastName 
1  John  Doe 
2  Jane  Roi 
3  Jerry  amol 
4  Jeff  Jels 


'SAVE' 'CANCEL' 

все вышеуказанные строки являются изменяемыми, я могу редактировать все 4 строки (ID, имя, фамилия) и хит кнопку «Сохранить». Задача здесь в том, что я передаю все значения из четырех строк в контроллер и проверяю каждую поданную, если какие-либо ошибки должны отправить ошибку обратно для просмотра по каждой строке, если это хорошо, а затем обновить в базе данных. Как достичь этого? пожалуйста, помогите мне

Вот мое мнение:

<table id='show_brands_table'> 
<tbody> 
    <g:each in="${brandsList}" status="i" var="brands">   
     <tr id="tr_brand_${brands.id}" class="${(i % 2) == 0 ? 'even' : 'odd'}"> 
      <td> 
       <input type="text" id="brand_${brands.id}" value="${brands.brand}" class="${(i % 2) == 0 ? 'even' : 'odd'}"></input> 
      </td> 
      <td> 
       <input type="text" id="brandID_${brands.id}" value="${brands.bpBrandId}" class="${(i % 2) == 0 ? 'even' : 'odd'}"></input> 
      </td> 
      <td> 
      <g:select id="weight${id}" name="weight${id}"from="${}"value="${weight}" onchange="modify();" />            
      </td> 
     </tr>   
    </g:each> 
</tbody> 

ответ

1

Grails может связать результаты формы к нескольким объектам. Используйте префикс, за которым следует точка для имен элементов формы, чтобы различать отдельные объекты. Пример:

<g:each in="${brandsList}" status="i" var="brand">  
    <input type="text" name="brand_${brand.id}.name" value="${brand.name}"> 
    <input type="text" name="brand_${brand.id}.weight" value="${brand.weight}"> 
    ... 
</g:each> 

В вашем контроллере вам нужно будет перебрать параметры и узнать, сколько объектов было отправлено. Вы можете посмотреть на приставку как пары, а затем использовать его в качестве пространства имен:

def update() { 
    for (name in params.keySet()) { 
     def match = name =~ /^brand_(\d+)$/ 
     if (match) { 
      def id = m[0][1] as long 
      def brand = Brand.get(id) 
      brand.properties['name', 'weight'] = params[name] 
      brand.save() 
     } 
    } 
} 

Смотрите раздел в руководстве Grails Data Binding для получения дополнительной информации.

Смежные вопросы