【问题标题】:Clear POST/GET request, Grails, GSP清除 POST/GET 请求、Grails、GSP
【发布时间】:2015-06-21 22:42:51
【问题描述】:

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

<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>

当我执行操作时,表中的一行被删除,但是当我重新加载页面时,另一行也将被删除。如何避免?可能是,我必须清理 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动作的源代码吗?它如何删除实体?你用身份证吗?问题太多了。
  • @defectus,你是对的。我必须使用 id。
  • 您还应该考虑使用交易 - 没有它可以取消预订并且不会增加可用座位。将代码移动到服务中也很有意义。

标签: grails gsp


【解决方案1】:

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

基本上应该是:

  1. GET 操作以显示表格
  2. 将表单发布到删除操作
  3. redirect() 到删除后的第一个操作

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

【讨论】:

猜你喜欢
  • 2020-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-24
  • 2014-05-12
  • 2017-05-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多