1

我有一个 JSF 2.0 应用程序,它有一个可以从 home.xhtml 访问的会话 bean,如下所示:

@Named(value = "home")
@SessionScoped
public class Home implements Serializable{

@PostConstruct
    public void init() {
// Retrieve database data here
        try {
        } catch (Exception ex) {
            System.out.println("EXCEPTION");


        }
    }
}

我想要做的是,如果数据库检索失败,重定向到 error.xhtml 页面。在上面的 init 方法中是如何做到的?

4

2 回答 2

2

您可以使用外部上下文的 redirect(java.lang.String)方法。

FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
externalContext.redirect("page2.xhtml");
于 2013-10-04T04:15:43.690 回答
1

无需手动搞乱重定向。直接抛出异常。

@PostConstruct
puclic void init() throws Exception { // Please be more specific, e.g. SQLException.
    // Retrieve database data here without try/catch block.
}

它已经最终出现在 HTTP 500 错误页面中,其位置(以及外观)可以通过以下方式自定义web.xml

<error-page>
    <error-code>500</error-code>
    <location>/WEB-INF/errorpages/500.xhtml</location>
</error-page>

如果您还想涵盖 ajax 请求的异常,请查看以下答案:处理 AJAXified 组件的 JSF 2.0 异常的正确方法是什么?

于 2013-10-04T10:37:16.540 回答