2014-11-17 2 views
0

Прежде чем я начну с моего вопроса, я попытаюсь объяснить, что я пытаюсь сделать.Обрабатывающая форма с повторяющимися входами

Я создаю форму с использованием Grails, и в форме на ней есть 2 раздела, основной вход и повторяемый вход. Ниже приведены идеи о том, как выглядит структура.

<div class="primary"> 
    <div class="${hasErrors(bean: dataInputInstance, field: 'mainInput', 'error')}"> 
     <label class="control-label"> 
      <g:message code="dataInput.mainInput.label" default="Main Input"/> 
     </label> 
     <div class="controls"> 
      <g:textField name="mainInput" value="${dataInputInstance?.mainInput}" /> 
     </div> 
    </div> 
</div> 
<div class="repeatable"> 
<div class="span6"> 
    <div class="${hasErrors(bean: dataInputInstance, field: 'inputA', 'error')}"> 
     <label class="control-label"> 
      <g:message code="dataInput.InputA.label" default="Input A"/> 
     </label> 
     <div class="controls"> 
      <g:textField id='inputA_1' name="inputA" value="${dataInputInstance?.inputA}" /> 
     </div> 
    </div> 
</div> 
<div class="span6"> 
    <div class="${hasErrors(bean: dataInputInstance, field: 'inputB', 'error')}"> 
     <label class="control-label"> 
      <g:message code="dataInput.InputB.label" default="Input B"/> 
     </label> 
     <div class="controls"> 
      <g:textField id='inputB_1' name="inputB" value="${dataInputInstance?.inputB}" /> 
     </div> 
    </div> 
</div> 

повторяющаяся часть ввода может быть повторена 1-50 раз. Количество экземпляров, сгенерированных и сохраненных в базе данных, зависит от количества повторяющихся форм. Каждый экземпляр представляет собой комбинацию первичного ввода + повторного ввода.

Если скажет, я создал 5 повторяющихся секций, то при сохранении формы, то PARAMS будет выглядеть ниже

Params: [mainInput: Вальмен, InputA: [valA1, valA2, valA3, valA4, valA5], InputB: [valB1, valB2, valB3, valB4, valB5]]

в контроллере, я использовал следующее, когда я пытаюсь сформировать экземпляры и сохранить его в базу данных

def save() { 
    def length = inputA.size() 
    def i 

    if (i = 0; i < length; i++){ 
     DataInput dataInputInstance = new DataInput() 
     dataInputInstance.mainInput = params.mainInput.trim() 
     dataInputInstance.inputA = params.inputA[i].trim() 
     dataInputInstance.inputB = params.inputB[i].trim() 

     dataInputInstance.save(flush:true) 
    } 
} 

до сих пор я управляемом чтобы эта часть была правильной.

Теперь возникает проблема.

Внутри контроллера сохранения я планирую включить некоторые проверки данных, прежде чем я сохраню его в базе данных. Если проверка выполнена успешно, то она будет продолжать сохранять данные. Если его нет, то он вернется к странице формы вместе с данными, которые пользователь вводит в форму. Код, который, как следует

if (insert checking condition here){ 
    render(view: "create", model: [dataInputInstance: dataInputInstance]) //If fail 
} 

Если количество повторяемой части равно 1, то форма будет оказывать вместе с данными о том, что пользовательский вводе. Однако, если повторяемая часть больше 1, тогда ей будет сложно передать данные обратно в форму.

Я попытался передать обратно Params обратно в форме, потому что я думал, так как PARAMS содержат массивы на нем, поэтому логично было бы передать обратно Params в форме, как показано ниже

if (insert checking condition here){ 
    render(view: "create", model: [dataInputInstance: params]) //If fail 
} 

Но все еще не работает.

У кого-нибудь есть идея?

ответ

0

Я смотрю на этот блок, где вы устанавливаете dataInputInstance.inputA как одно значение, а не весь объект списка. Это то, что вы намеревались?

dataInputInstance.inputA = params.inputA[i].trim() 
dataInputInstance.inputB = params.inputB[i].trim() 

Не могли бы вы высказать свое мнение о коде GSP, если это не причина? Вам нужно посмотреть, как вы читаете значения из вашего представления при отказе проверки.

+0

Эта часть верна, насколько я обеспокоен. Потому что я сохраняю экземпляр один за другим в базу данных, из-за чего я использую цикл там. Параметры содержат все значения, полученные из формы, поэтому для проверки я просто использую значения в параметрах. Что касается GSP, это точно так же, как я задал свой вопрос, может быть, не все, но только важная часть, связанная с моим вопросом. –

+0

ОК. вы вызвали возврат после вызова рендера при ошибке? см. [this] (http: // stackoverflow.com/a/8714846/1385627) –

+0

Да, попробовал с и без него ... тот же результат. –

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