Changeset 859 for trunk/grails-app


Ignore:
Timestamp:
Mar 13, 2011, 12:05:16 AM (13 years ago)
Author:
gav
Message:

Rework entry create and save ajax to allow multiple page element updates with JSON.

Location:
trunk/grails-app
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/grails-app/controllers/EntryDetailedController.groovy

    r838 r859  
    1010
    1111    // the delete, save and update actions only accept POST requests
    12     static allowedMethods = [delete:'POST', save:'POST', update:'POST']
     12    static allowedMethods = [delete:'POST', save:'POST', update:'POST', ajaxCreate:'POST', ajaxSave:'POST']
    1313
    1414    def list = {
     
    106106    def ajaxCreate = {
    107107        if(!params.taskId || !params.entryTypeId) {
    108             response.status = 403
    109108            params.errorMessage = g.message(code: "entry.create.no.params.ajax")
    110             render(template: "/shared/messages")
     109            render(contentType:"text/json", status: 403, template: "/shared/messages")
    111110            return
    112111        }
     
    115114
    116115        if(!taskInstance) {
    117             response.status = 403
    118116            params.errorMessage = g.message(code:"default.not.found", args:['Task',params.taskId])
    119             render(template: "/shared/messages")
     117            render(contentType:"text/json", status: 403, template: "/shared/messages")
    120118            return
    121119        }
     
    123121        // Check for Complete task.
    124122        if(taskInstance.taskStatus.id == 3) {
    125             response.status = 403
    126123            params.errorMessage = g.message(code:"task.operationNotPermittedOnCompleteTask")
    127             render(template: "/shared/messages")
     124            render(contentType:"text/json", status: 403, template: "/shared/messages")
    128125            return
    129126        }
     
    133130        entryInstance.task = taskInstance
    134131        entryInstance.entryType = EntryType.read(params.entryTypeId)
    135         render(template: "create", model: ['entryInstance': entryInstance])
    136     }
     132        def model = ['entryInstance': entryInstance]
     133
     134        render(contentType:"text/json") {
     135            updates = array {
     136                element([ mode: 'replace', target:"$params.target", content: g.render(template: 'create', model:model) ])
     137            }
     138        }
     139
     140    } // ajaxCreate
    137141
    138142    def ajaxSave = {
     
    142146        if(!result.error) {
    143147            def entryList = Entry.withCriteria {
    144                                                                 eq("entryType", result.entryInstance.entryType)
    145                                                                 task {
    146                                                                     idEq(result.taskId)
    147                                                                 }
    148                                                         }
    149             render(template: "list", model: ['entryList': entryList])
    150             return
    151         }
    152 
    153         if(result.error.code != "default.create.failure") {
    154             response.status = 403
     148                                            eq("entryType", result.entryInstance.entryType)
     149                                            task {
     150                                                idEq(result.taskId)
     151                                            }
     152                                    }
     153
     154            def model = ['entryList': entryList]
     155
     156            render(contentType:"text/json") {
     157                updates = array {
     158                    element([ mode: 'replace', target:"$params.target", content: g.render(template: 'list', model:model) ])
     159                }
     160            }
     161            return
     162        }
     163
     164        if(result.error.code != "default.create.failure")
    155165            params.errorMessage = g.message(code: result.error.code)
    156             render(template: "/shared/messages")
    157             return
    158         }
    159 
    160         response.status = 403
    161         render(template: "create", model: ['entryInstance': result.entryInstance])
     166
     167        def model = ['entryInstance': result.entryInstance]
     168        render(contentType:"text/json", status: 403, template: "create", model: model)
    162169    } // ajaxSave
    163170
  • trunk/grails-app/views/taskDetailed/_showProcedureTab.gsp

    r833 r859  
    4646                            value="Add PM Entry"
    4747                            onclick="getCreateEntryForm(jQuery('#pmEntryContainer'),
    48                                                                                 jQuery('#createPMEntryContainer'),
    4948                                                                                jQuery('#pmEntryButton'),
    50                                                                                 {taskId: ${taskInstance?.id}, entryTypeId: 6})" />
     49                                                                                {target: '#createPMEntryContainer',
     50                                                                                taskId: ${taskInstance?.id},
     51                                                                                entryTypeId: 6})" />
    5152            </span>
    5253        </div>
  • trunk/grails-app/views/taskDetailed/_showTaskTab.gsp

    r846 r859  
    231231                        value="Add Fault"
    232232                        onclick="getCreateEntryForm(jQuery('#entryFaultContainer'),
    233                                                                             jQuery('#createEntryFaultContainer'),
    234233                                                                            jQuery('#entryFaultButton'),
    235                                                                             {taskId: ${taskInstance?.id}, entryTypeId: 1})" />
     234                                                                            {target: '#createEntryFaultContainer',
     235                                                                            taskId: ${taskInstance?.id},
     236                                                                            entryTypeId: 1})" />
    236237        </span>
    237238    </div>
     
    260261                        value="Add Cause"
    261262                        onclick="getCreateEntryForm(jQuery('#entryCauseContainer'),
    262                                                                             jQuery('#createEntryCauseContainer'),
    263263                                                                            jQuery('#entryCauseButton'),
    264                                                                             {taskId: ${taskInstance?.id}, entryTypeId: 2})" />
     264                                                                            {target: '#createEntryCauseContainer',
     265                                                                            taskId: ${taskInstance?.id},
     266                                                                            entryTypeId: 2})" />
    265267        </span>
    266268    </div>
     
    289291                        value="Add Work Done"
    290292                        onclick="getCreateEntryForm(jQuery('#workDoneContainer'),
    291                                                                             jQuery('#createWorkDoneContainer'),
    292293                                                                            jQuery('#workDoneButton'),
    293                                                                             {taskId: ${taskInstance?.id}, entryTypeId: 3})" />
     294                                                                            {target: '#createWorkDoneContainer',
     295                                                                            taskId: ${taskInstance?.id},
     296                                                                            entryTypeId: 3})" />
    294297        </span>
    295298    </div>
Note: See TracChangeset for help on using the changeset viewer.