【问题标题】:grails simple redirect not workinggrails简单重定向不起作用
【发布时间】:2013-03-24 12:34:40
【问题描述】:

是的,我似乎做对了,它是如此简单,确实不应该缺少任何东西,但对于我的生活,我看不出它为什么不起作用,我的列表视图上有一个远程链接,比如因此:-

<g:remoteLink action="makeReady" id="${testExecQueueInstance.id}">X</g:remoteLink>

此时 makeReady 是空的,除了我希望它显示选定的行,因此控制器中只有这个:-

def makeReady(Long myid){
    redirect(action:"show", id:myid)
}

show action 是 grails 创建的沼泽标准 show,只传入一个 Lond...

为什么这不起作用?我错过了什么愚蠢的显而易见的事情,我会在接下来的几天里把自己踢倒?

【问题讨论】:

  • 实际发生的错误是什么?重定向是否发生在错误的 URL 上?没有进行 Ajax 调用吗? makeReady 控制器动作没有被执行吗?
  • 不幸的是,实际上什么也没发生... :(
  • 那么,即使是 Ajax 调用也不起作用?

标签: grails redirect show


【解决方案1】:

&lt;g:remoteLink 发出 ajax 请求,并且您的页面已经呈现,服务器无法从中进行重定向,它已经显示。

有两种方法可以让它工作:

  • 使用标准链接
  • 以 JSON/Javascript 响应,并在客户端进行重定向。

对于第二个选项,它将类似于:

<div id="success"></div>
<g:remoteLink action="makeReady" id="${testExecQueueInstance.id}" update="success">X</g:remoteLink>

def makeReady(Long myid){
  String url = createLink(action:"show", id:myid)
  render(text: "window.location.href='${url.encodeAsURL()}'", contentType: "application/javascript")
}

【讨论】:

  • 感谢 Igor 的建议,但是当我尝试此操作时,我收到此错误“错误错误。GrailsExceptionResolver - 处理请求时发生 MissingMethodException:[POST] /FARTFramework/testExecQueue/makeReady/10 没有方法签名:java.lang.String.encodeAsJavascript() 适用于参数类型:() 值:[]. Stacktrace 如下:消息:没有方法签名:java.lang.String.encodeAsJavascript() 适用于参数类型:()值:[]"
  • 你是对的,应该是.encodeAsJavaScript()。或.encodeAsURL()
  • 当我将它更改为 encodeasURL 时,我得到了一个重定向,但它没有加载正确的页面,现在生成的 URL 看起来是“localhost/framework/testExecQueue/%2Fframework/%2FtestExecQueue/%Fshow " 没有 id,不知道这里发生了什么......?
  • 如果我尝试使用 .encodeAsJavaScript,那么 div 会在列表页面刷新之前快速显示文本“window.location.href='\/framework\/testExecQueue\/show'”在顶部阅读“未找到 ID 为 null 的 TestExecQueue”?
  • 很难理解为什么它最终会生成无效的 URL,没有额外的细节(完整的代码等)。它看起来像另一个问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-25
  • 2019-02-02
相关资源
最近更新 更多