清除 POST/GET 请求、Grails、GSP

Clear POST/GET request, Grails, GSP

比如我有这样的gsp-code,这是table标签内容:

<table class="table">
                    <thead>
                        <tr>
                            <th>Restaurant name</th>
                            <th>Booking date</th>
                            <th>Booking time from</th>
                            <th>Booking time till</th>
                            <th>Hall</th>
                            <th>Place in table</th>
<%--                            <th>Price</th>--%>
                            <th></th>
                        </tr>   
                    </thead>
                    <tbody>
                        <g:each in="${tableInfo}" var="table">
                            <tr>
                                <td>${table.cafeeName.cafeeName}</td>
                                <td>${new SimpleDateFormat("yyyy-MM-dd").format(table.reservationDate)}</td>
                                <td>${table.startTimeLimit.toString(timeForm)}</td>
                                <td>
                                    <g:if test="${table.endTimeLimit != null}">
                                        ${table.endTimeLimit.toString(timeForm)}
                                    </g:if>
                                    <g:else>
                                        <p>-</p>
                                    </g:else>   
                                </td>
                                <td>${table.hall}</td>
                                <g:if test="${table.places != 0}">
                                    <td>${table.places}</td>
                                </g:if>
                                <g:else>
                                    <td>-</td>
                                </g:else>
<%--                                <td>${table.cost}</td>--%>
                                <td><g:link action="deleteReservedTable" params="[cafeeName: "${table.cafeeName.cafeeName}", cafeeAPI: "${table.cafeeName.apiInit}",
                                date: "${table.reservationDate }", startTime: "${table.startTimeLimit }", endTime: "${table.endTimeLimit }",
                                placesAmount: "${table.places }", cost: "${table.cost }", hall: "${table.hall}"]">Cancel</g:link></td>
                            </tr>
                        </g:each>
                    </tbody>
                </table>

当我执行操作时,table 中的一行被删除,但是当我重新加载页面时,另一行也会被删除。如何避免?可能是,我必须要清理 GET/POST 请求?怎么做?或者最好在删除前附上警告?

def deleteReservedTable(params){
        try {
            def user = Person.findByUsername(springSecurityService.currentUser.username)
            ApiRequest apiRequest
            if(params['cafeeAPI'] != ""){
                apiRequest = ApiHandlerController.request(params['cafeeAPI'], "TO_DELETE", params)
                        def myPlace = ReservedTable.findByVisitorAndCafeeName(user, Cafee.findByApiInit(params['cafeeAPI']))
                        myPlace.delete(flush: true)
            }else{
                def myPlace = ReservedTable.findByVisitorAndCafeeNameAndPlaces(user, Cafee.findByCafeeName(params['cafeeName']), Integer.parseInt(params['placesAmount']))
                        def cafee = Cafee.findByCafeeName(params['cafeeName'])          
                        def table = TablePlacesInfo.where {
                    placesInTableAmount == Integer.parseInt(params['placesAmount'])
                            hall {
                        hallName == params['hall']
                                cafee {
                            cafeeName == cafee.getCafeeName()
                        }
                    }
                }.get()


                myPlace.delete(flush: true)
                if(table != null){
                    table.tableForReservationAmount += 1
                    cafee.totalReservationPlaces += 1
                    if(!table.save(flush: true)){
                        table.errors.each{
                            println it
                        }
                    }
                }
                if(!cafee.save(flush: true)){
                    cafee.errors.each{
                        println it
                    }
                }
            }
            showReservedTableForVisitor()
        } catch (Exception e) {
            render (view:'error.gsp')
            e.printStackTrace()
        }
    }

您的删除操作 deleteReservedTable 应该重定向回主视图。

基本上应该是:

  1. 要显示的 GET 操作 table
  2. POST 表单到删除操作
  3. redirect() 到删除后的第一个动作

GET 请求应仅用于检索数据,POST 可用于更新服务器上的状态