gpt4 book ai didi

ajax - 使用 AJAX 请求链接服务器端消息/异常

转载 作者:行者123 更新时间:2023-12-04 18:21:01 25 4
gpt4 key购买 nike

我正在使用 Primefaces 进行 ajax 提交,但在将服务器端消息与我的 ajax 请求链接时遇到问题。
假设我有一个调用 Action 的按钮。

在我的托管 bean 中,我需要引发异常吗?如何将此消息传递到我的 ajax 请求中

public void checkout(ActionEvent event){
if(expression){
throw new CustomException("Account balance is not enough!");
}
}

public class CustomException extends RuntimeException {
public CustomException(String message) {
super(message);
}
}

我该如何处理这种情况?我的 onerror javascript 方法能处理这个问题吗?

此外,在一种情况下,假设数据库已关闭,那么我该如何处理异常?我是否访问过错误消息
在我的javascript函数中?
public void checkout(ActionEvent event){
try{
//DB is down
if(expression){
throw new CustomException("Account balance is not enough!");
}
}catch(Exception e){

}
}

最佳答案

至于您的具体问题,您需要实现自定义 ExceptionHandler 为此,当 ajax 请求中发生异常时,它基本上执行以下操作:

String errorPageLocation = "/WEB-INF/errorpages/500.xhtml";
context.setViewRoot(context.getApplication().getViewHandler().createView(context, errorPageLocation));
context.getPartialViewContext().setRenderAll(true);
context.renderResponse();

如果您想使用 web.xml,这并非微不足道。错误页面考虑在内。您需要解析整个 web.xml为此找到错误页面的位置。 OmniFaces实用程序库正好有这样一个异常处理程序, FullAjaxExceptionHandler .您可以找到完整的源代码 here和展示示例 here .

至于您的具体功能要求,当只有用户错误时,我不会抛出异常。这是完全可以恢复的。您需要创建并添加一个 FacesMessage并有 ajax 来更新 <h:messages> , <p:messages><p:growl> . PrimeFaces 支持 autoUpdate="true"它将根据 ajax 请求自动更新。例如。
context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Insufficient balance", null));



<p:messages autoUpdate="true" />

抛出异常仅在不可恢复的情况下才有意义,例如数据库关闭时。请注意,您通常不会自己抛出这样的异常。在 JPA 的情况下,它已经被抛出为 PersistenceException反过来,您不应该在 JSF 托管 bean 中捕获它,而只是放手。

关于ajax - 使用 AJAX 请求链接服务器端消息/异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10699327/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com