Liferay 7 MVC资源命令:根据返回值与JS进行反应



我有一个Liferay 7.3 MVC资源命令,这是这样的:

public boolean serveResource(
ResourceRequest resourceRequest, ResourceResponse resourceResponse) {    
try {
// my code goes here
return false;
}catch(Exception e){

return true;
}
}

我在JavaScript中调用这个命令:

var req = new XMLHttpRequest();
req.open("POST", '${upload}', true)
req.onload = function (event) {
console.log("success");
}

req.onerror = function (event) {
console.log("error");      
}
// do request
req.send(form_data);

现在的问题是总是"onload"当MVC的resourccommands在catch子句中返回true时,也会调用该函数。

所以我的问题:我怎么能知道在JavaScript当我的ResourceCommand成功与否?

Javadoc对布尔返回类型的目的并不是很清楚。特别是GenericPortlet.serveResource有一个void返回类型。

然而,考虑什么可能发生在你的// my code goes here块使它更清晰的期望:客户端不能依赖布尔结果被信号返回:你可以(通常做)访问ResourceResponse的输出流,发送所有你喜欢的数据,它可以长时间在客户端,当你最终return true;从这个代码。这意味着框架没有机会拦截或重定向任何已经进行的通信。

同样,一个简单的true/false返回值不会给你任何控制哪种错误被发送给客户端。是401吗?404年?418年?500年?还是返回200并显示HTML错误消息?JSON编码错误?

如果您依赖于此操作的结果:保持对它的控制。我不能告诉你布尔值的返回值是什么,但它不是为了浏览器的利益。您可以决定是为错误信号使用HTTP状态码,还是使用特定的有效负载。一旦你实现了它,你就知道在JS端会发生什么了。

记住,你必须在"ok"one_answers"ok"之间做出选择。或"错误情况";在您将任何数据发送回客户机之前。如果你开始说"ok"结果到客户端,突然遇到一个异常,你可能已经交付了一半的客户端,但不能依赖于改变马匹,例如,你不能重新开始,发送一个错误消息,因为响应可能已经(一半)在到浏览器的路上。

最新更新