Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List Grails多对多将多个值从gsp传递到控制器以保存_List_Grails_Save_Gsp - Fatal编程技术网

List Grails多对多将多个值从gsp传递到控制器以保存

List Grails多对多将多个值从gsp传递到控制器以保存,list,grails,save,gsp,List,Grails,Save,Gsp,在使用联接表的列表中,表单和事件之间存在多对多关系,当我在编辑模式下显示数据时,我会在表中以自己的下拉列表显示每个项目,而不是一个多选下拉列表。我还有一个小jQuery,如果我想添加更多的项目,可以在其中添加额外的下拉列表,我的问题是,如何按顺序保存这组“事件”?代码如下:- 初始化_form.gsp以加载表单的所有链接事件:- <table id="eventList"> <g:each in="${formInstance?.events}" stat

在使用联接表的列表中,表单和事件之间存在多对多关系,当我在编辑模式下显示数据时,我会在表中以自己的下拉列表显示每个项目,而不是一个多选下拉列表。我还有一个小jQuery,如果我想添加更多的项目,可以在其中添加额外的下拉列表,我的问题是,如何按顺序保存这组“事件”?代码如下:-

初始化_form.gsp以加载表单的所有链接事件:-

   <table id="eventList">
        <g:each in="${formInstance?.events}" status = "i" var="item">
            <tr class="${(i % 2) == 0 ? 'even' : 'odd'}">
                <td>
                    <label></label>
                    <g:select name="event_${i}" from="${framework.Event.list()}" required="required" optionKey="id" value="${item.id}" />
                </td>
            </tr>
        </g:each>
    </table>


原来这是因为我的链接表在form_id和event_id组合列上都设置了主键,我不关心这一点,因为我希望能够在其中包含重复项(因为顺序更重要),删除表上的这些主键值解决了问题


我仍然存在这样一个问题:如果我现在添加/删除很多次,我会遇到相同名称的问题以及所代表的问题,但我可以通过一些jquery黑客(我希望)来解决这个问题。

假设您的hasMany被命名为“events”,请尝试
name=“events[$I].id”
。当我将其更改为此,然后尝试仅更改已经存在的事物的顺序时,我得到以下错误
违反主键约束“PK\uu lnk\u form\uuu 7B3919BB0AD2A005”。无法在对象“dbo.lnk_form_event”中插入重复键。。堆栈跟踪如下:消息:违反主键约束“PK_ulnk_form_uuu7b3919bb0ad2a005”。无法在对象“dbo.lnk\u表单\u事件”中插入重复键。
有什么想法吗?它肯定离我原来的位置更远了,就像以前一样,什么事也没有发生过!:)如果我添加了一个新的下拉列表,然后试图保存它,而不更改以前的字段,我也会遇到这个错误。。。如果我从零开始使用一个没有事件的表单,那么它可以正常工作,但是一旦它被保存,我就无法更新或更改它:S我正在使用SQL server,如果它有任何用处的话…?你能发布你的域类吗?已经按要求添加了:)
<tr class="${((newRow+1) % 2) == 0 ? 'even' : 'odd'}">
    <td>
        <label></label>
            <g:select name="event_${newRow-1}" from="${framework.Event.list()}" required="required" optionKey="id" />
    </td>
</tr>
<g:actionSubmit class="save" action="update" value="${message(code: 'default.button.update.label', default: 'Update')}" />
import java.util.List;

class Form {
    static constraints = {
        formDesc(blank:false,maxSize:100,unique: true)
    }

    static mapping = {
        table "form"
        version false
        columns{
            id column:"form_id"
            formDesc column:"description"
            testscenarios joinTable:[name:"lnk_scenario_form",key:'form_id']
            events joinTable:[name:"lnk_form_event",key:'form_id']
        }
    }

    String formDesc
    List events

    static hasMany = [testscenarios:TestScenario, events:Event]
    static belongsTo = fartframework.TestScenario

    String toString (){
        "${formDesc}"
    }
}
class Event {
       static constraints = {
           eventTypeID()
           eventOrder()
           objectID()
           testDataID()
        }

    static mapping = {
        table "event_form"
        version false
        columns{
            id column:"event_form_id"
            eventTypeID column:"event_id"
            eventOrder column:"event_order"
            testDataID column:"test_data_id"
            objectID column:"object_id"

            forms joinTable:[name:"lnk_form_event", key:'event_id']
        }
    }

    EventType eventTypeID
    Integer eventOrder
    TestData testDataID
    Object objectID

    static hasMany = [forms:Form]
    static belongsTo = fartframework.Form

    String toString (){
        "${eventTypeID}"
    }
}