Don*_*onX 17 java ajax grails gsp
我正在开发一个grails应用程序,它使用了很多ajax.如果请求是ajax调用那么它应该给出响应(这部分工作),但是如果我在浏览器中键入URL它应该带我到home/index页面而不是请求的page.Below是ajax调用的示例gsp代码.
<g:remoteFunction action="list" controller="todo" update="todo-ajax">
<div id ="todo-ajax">
//ajax call rendered in this area
</div>
Run Code Online (Sandbox Code Playgroud)
如果我们在浏览器URL栏中键入http:// localhost:8080/Dash/todo/list,控制器应重定向到http:// localhost:8080/Dash/auth/index
如何在控制器中验证这一点.
Sie*_*uer 34
在BootStrap.init闭包中添加此动态方法是一种常见做法:
HttpServletRequest.metaClass.isXhr = {->
'XMLHttpRequest' == delegate.getHeader('X-Requested-With')
}
Run Code Online (Sandbox Code Playgroud)
这允许您通过执行以下操作来测试当前请求是否是ajax调用:
if(request.xhr) { ... }
Run Code Online (Sandbox Code Playgroud)
最简单的解决方案是在你的todo动作中添加这样的东西:
if(!request.xhr) {
redirect(controller: 'auth', action: 'index')
return false
}
Run Code Online (Sandbox Code Playgroud)
您还可以使用过滤器/拦截器.我已经构建了一个解决方案,其中我使用自定义注释对所有仅具有ajax的操作进行注释,然后在过滤器中对此进行验证.
grails-app/conf/BootStrap.groovy的完整示例:
import javax.servlet.http.HttpServletRequest
class BootStrap {
def init = { servletContext ->
HttpServletRequest.metaClass.isXhr = {->
'XMLHttpRequest' == delegate.getHeader('X-Requested-With')
}
}
def destroy = {
}
}
Run Code Online (Sandbox Code Playgroud)
从Grails 1.1 xhr开始,向该request对象添加了一个属性,该属性使您可以检测AJAX请求。其用法示例如下:
def MyController {
def myAction() {
if (request.xhr) {
// send response to AJAX request
} else {
// send response to non-AJAX request
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11336 次 |
| 最近记录: |