Прежде чем я начну с моего вопроса, я попытаюсь объяснить, что я пытаюсь сделать.Обрабатывающая форма с повторяющимися входами
Я создаю форму с использованием 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
}
Но все еще не работает.
У кого-нибудь есть идея?
Эта часть верна, насколько я обеспокоен. Потому что я сохраняю экземпляр один за другим в базу данных, из-за чего я использую цикл там. Параметры содержат все значения, полученные из формы, поэтому для проверки я просто использую значения в параметрах. Что касается GSP, это точно так же, как я задал свой вопрос, может быть, не все, но только важная часть, связанная с моим вопросом. –
ОК. вы вызвали возврат после вызова рендера при ошибке? см. [this] (http: // stackoverflow.com/a/8714846/1385627) –
Да, попробовал с и без него ... тот же результат. –