2012-05-22 116 views
2

我正在使用Primefaces进行ajax提交,但我无法链接服务器端消息和我的ajax请求。 假设我有这个按钮来调用一个动作。 在我的托管bean中,是否需要引发异常?如何将此消息传入我的ajax请求通过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){ 

    } 
} 

回答

4

至于你的具体问题,你需要实现自定义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,而是放手。

+3

为什么你知道这么多东西? Err..Just开玩笑。谢谢总是...... :) –

相关问题