我正在尝试使用Grails标记SubmitToRemote
来处理失败消息(例如验证域对象上的错误)。
我的标签submitToRemote是:
<g:submitToRemote
url="[action: 'save']"
update="[success: 'wizard', failure: 'error']"
onFailure="onFailure(data, code)"
name="submit"
class="btn btn-large btn-inverse"
value="Save"/>
我的onFailure功能是:
<g:javascript>
function onFailure(data, code){
document.getElementById('errors').style.display = 'inline';
$('#errors').html(data);
}
</g:javascript>
最后,grails行动:
(...)
if(!plan.validate()){
render status: 400, text: "This plan cannot be saved. Fill all fields and try again."
return
}
我该如何正确地做到这一点?
答案 0 :(得分:1)
我不知道这现在是否有帮助,但肯定可以帮助别人。
我已成功调用并将消息传递给 onFailure 方法。
所以我就是这样做的,我在控制器中设置了错误代码和文本,如下所示:
render(status: 403, text: 'Request failed to complete due to some error.')
然后在gsp上我使用 XMLHttpRequest 拉取了消息:
<g:formRemote onFailure="onFailure(XMLHttpRequest.responseText)" ...>
根据我的发现,我看到grails结束并在 onFailure 函数下创建ajax。
error:function(XMLHttpRequest,textStatus,errorThrown){onFailure(XMLHttpRequest.responseText)...
Grails版本:2.5.0
希望这有帮助!
答案 1 :(得分:0)
我使用onFailure但是在onSuccess上使用并实现了类似的功能。
<g:submitToRemote
url="[action: 'save']"
update="show_response"
onSuccess="handleResponse(data, code)"
name="submit"
class="btn btn-large btn-inverse"
value="Save"/>
show_response是您希望显示响应(成功/失败)的div
控制器或服务中的
def save() {
//your data CRUD operation logic goes here
// for success return success response
return new Response("sucess")
// for failure or error return error response
return new Response("error")
}
编写一个groovy类来处理响应,例如Response.groovy
class Response {
boolean success
def errors = []
Response(String errorMessage) {
this.success = false
this.errors << [message: errorMessage]
}
....
}
最后你的gsp代码看起来像
<g:javascript>
function handleResponse(response,textStatus){
if(response.success === true){
//use the div and write the UI to show message
} else {
//use the div and write the UI to show message
}
</g:javascript>
可能需要进行细微更改才能使其正常工作,但我确信它符合您的需求