清除 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
应该重定向回主视图。
基本上应该是:
- 要显示的 GET 操作 table
- POST 表单到删除操作
- redirect() 到删除后的第一个动作
GET 请求应仅用于检索数据,POST 可用于更新服务器上的状态
比如我有这样的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
应该重定向回主视图。
基本上应该是:
- 要显示的 GET 操作 table
- POST 表单到删除操作
- redirect() 到删除后的第一个动作
GET 请求应仅用于检索数据,POST 可用于更新服务器上的状态