如何处理托管bean中的异常' getter(从xhtml调用)?

时间:2015-08-24 09:10:36

标签: jsf exception-handling el jsf-2.2

我需要处理bean中引发的异常'干将。默认情况下,如果我的xhtml中有一个像这样的片段:

<h:outputText value="#{bean.someProperty}" />

并且调用方法getSomeProperty()会导致异常,整个页面不会呈现。我需要全局处理这些异常:对于某些异常类,不显示任何代替此h:outputText并正常显示页面的其余部分。或者,至少不呈现页面,而是向用户显示相应的消息。

我尝试通过编写自定义EL解析器来解决此问题:

package package.name;

import javax.el.ELContext;
import javax.el.ELException;
import javax.el.PropertyNotFoundException;
import org.springframework.web.jsf.el.SpringBeanFacesELResolver;

public class MyELResolver extends SpringBeanFacesELResolver {

    @Override
    public Object getValue(ELContext arg0, Object arg1, Object arg2) throws NullPointerException, PropertyNotFoundException, ELException {
        try {
            return super.getValue(arg0, arg1, arg2);
        } catch (Exception e) {
            return null; // TODO
        }
    }

然后我以这种方式在faces-config.xml文件中注册了它:

<el-resolver>package.name.MyELResolver</el-resolver>

我已经放了两个断点 - 一个在try块中,另一个在catch块中。呈现页面时,会多次访问try块。但是当我想显示一个getter导致异常的bean属性时,没有到达catch块。 Stacktrace包含片段:

Caused by: javax.el.ELException: Error reading 'someProperty' on type my.package.ExampleJSFBean
    at javax.el.BeanELResolver.getValue(BeanELResolver.java:98)

这是否意味着,另一个EL解析器已注册?在页面呈现期间调用的getter方法中处理异常的最佳方法是什么?

我使用Spring 3.2.8.RELEASE和Mojara 2.2.10。

0 个答案:

没有答案