我正在研究Jspresso框架(使用Swing啓動項目)。我已經在組件之間建立了N-N雙向關係,但沒有出現與這些關係相對應的字段。 例如,我有項目和學生之間的關係(一個學生可以有很多項目,一個項目可以有很多學生)。當我添加一個項目並在其詳細視圖中打開它時,我可以創建一個新學生並將其添加到項目中,但是我無法將現有學生添加到項目中,也不會在搜索視圖中根據學生搜索項目。 有沒有辦法顯示這個?N-N雙向關係沒有在用戶界面上使用Jspresso處理
這裏是我的view.groovy
// Implement your views here using the SJS DSL.
form('Project.pane',
parent:'decoratedView',
labelsPosition:'ASIDE',
columnCount:2,
fields: ['name','students','technologies','usesTrainers','technicalTrainers']){
actionMap{
actionList('FILE'){
action(ref:'saveModuleObjectFrontAction')
action(ref:'reloadModuleObjectFrontAction')
}
}
}
table'Project-students.table',
parent:'decoratedView',
actionMap:'masterDetailActionMap'
split_vertical'Project.proj.view',
model:'Project',
top:'Project.pane',
bottom:'Project-students.table'
form('Student.pane',
parent:'decoratedView',
labelsPosition:'ASIDE',
columnCount:2){
actionMap{
actionList('FILE'){
action(ref:'saveModuleObjectFrontAction')
action(ref:'reloadModuleObjectFrontAction')
}
}
}
table'Student-technologies.table',
parent:'decoratedView',
actionMap:'masterDetailActionMap'
split_vertical'Student.proj.view',
model:'Student',
top:'Student.pane',
bottom:'Student-technologies.table'
form('Trainer.pane',
parent:'decoratedView',
labelsPosition:'ASIDE',
columnCount:5)
form('Technology.pane',
parent:'decoratedView',
labelsPosition:'ASIDE',
columnCount:5)
這裏是我的model.groovy
// Implement your domain here using the SJS DSL.
Interface('Traceable',
interceptors: 'TraceableLifecycleInterceptor',
uncloned: ['createTimestamp',
'lastUpdateTimestamp','lastUpdatedBy','createdBy']) {
string_64 'createdBy',readOnly:true
date_time 'createTimestamp', timeZoneAware: true, readOnly: true
string_64 'lastUpdatedBy', readOnly:true
date_time 'lastUpdateTimestamp', timeZoneAware: true, readOnly: true
}
Entity ('Project', extend:'Traceable',toString:'name',
icon:'project.png',
rendered: ['name','lastUpdateTimestamp','lastUpdatedBy','createTimestamp','createdBy'],
queryable: ['name']){
string_64 'name'
set 'technologies', composition:true, ref:'Technology'
set 'technicalTrainers', composition:true, ref:'Trainer'
set 'usesTrainers', composition:true, ref:'Trainer'
set 'students', composition:true, ref:'Student'
}
Entity ('Technology', extend:'Traceable',toString:'name',
icon:'technology.png',
rendered: ['name','lastUpdateTimestamp','lastUpdatedBy','createTimestamp','createdBy'],
queryable: ['name']){
string_64 'name'
set 'projects', ref:'Project', reverse:'Project-technologies'
set 'studentsAbleToUseIt', ref:'Technology', reverse:'Student-technologies'
set 'trainersAbleToTeachIt', ref:'Technology', reverse:'Trainer-technologies'
}
Interface ('Person', extend:'Traceable'){
string_64 'lastname'
string_64 'firstname'
date_time 'createTimestamp', timeZoneAware: true, readOnly: true
date_time 'lastUpdateTimestamp', timeZoneAware: true, readOnly: true
}
Entity ('Trainer',
extend: 'Person',
toString:'firstname',
icon:'trainer.png',
rendered: ['firstname','lastname','lastUpdateTimestamp','lastUpdatedBy','createTimestamp','createdBy'],
queryable: ['firstname','lastname']){
set 'projectsAsTechnicalTrainer', ref:'Project', reverse:'Project-technicalTrainers'
set 'projectsAsUsesTrainer', ref:'Project', reverse:'Project-usesTrainers'
set 'technologies', composition:true, ref:'Technology'
date_time 'createTimestamp', timeZoneAware: true, readOnly: true
date_time 'lastUpdateTimestamp', timeZoneAware: true, readOnly: true
}
Entity ('Student',
extend: 'Person',
toString:'firstname',
icon:'student.png',
rendered: ['firstname','lastname','lastUpdateTimestamp','lastUpdatedBy','createTimestamp','createdBy'],
queryable: ['firstname','lastname']){
set 'technologies', composition:true, ref:'Technology'
set 'projects', ref:'Project', reverse:'Project-students'
date_time 'createTimestamp', timeZoneAware: true, readOnly: true
date_time 'lastUpdateTimestamp', timeZoneAware: true, readOnly: true
}