2015-06-21 83 views
0

比如我有這樣的GSP代碼,這是表標籤內容:清除POST/GET請求,Grails的,GSP

<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() 
     } 
    } 
+1

您能告訴我們'deleteReserve dTable'行動?它如何刪除實體?你使用ID嗎?太多問題。 – defectus

+0

@defectus,已更新 – pragmus

+0

@defectus,你是對的。我必須使用ID。 – pragmus

回答

2

您的刪除操作deleteReservedTable應重定向回主視圖。

基本上它應該是:

  1. GET動作顯示錶
  2. POST形式的刪除操作
  3. 重定向()到第一個行動刪除後

GET請求應只用於檢索數據,POST可用於更新服務器上的狀態

+0

我同意這個解決方案,這是一種常見的模式,稱爲Post/Redirect/Get:https://es.wikipedia.org/wiki/Post/Redirect/Get – albertovilches

+0

defectus是對的:我必須用id來刪除單位 – pragmus