1

我正在开发一个实用程序类,使用它我们需要调用在 EL 表达式中定义的托管 bean 方法。是否有任何示例,例如如何使用 EL 表达式调用托管 bean 方法。

这里我不知道托管bean的类型。但我知道 EL 表达式。所以我不能将类型转换为特定的托管 bean。

表达式为:#{phaseListenerBean.compListener}

我的代码如何调用该compListener方法phaseListenerBean?我的实用程序类。它在 Jar 文件中可用。

`public void beforePhase(PhaseEvent event) { if(PhaseId.RENDER_RESPONSE.equals(event.getPhaseId())){ SystemListLoaderHelper.populateSelectOneValidValues();

        SystemListLoaderHelper.populateSelectManyCheckboxValidValues();
        FacesContext context = FacesContext.getCurrentInstance();
        ExpressionFactory factory =context.getApplication().getExpressionFactory();
        MethodExpression methodExpression = factory.createMethodExpression(
                context.getELContext(), "#{phaseListenerBean.callModuleSpecificServiceCalls}", 
                Void.class.getClass(),  null);
        methodExpression.invoke(context.getELContext(), null);

// callModuleSpecificServiceCalls(); } }`

4

1 回答 1

2

您可以尝试使用 Faces 上下文调用 bean,例如,如果您想要 bean,您可以使用:

FacesContext facesContext = FacesContext.getCurrentInstance();
Object o = facesContext.getApplication().evaluateExpressionGet(facesContext,
                    "#{phaseListenerBean}", Object.class);

稍后使用反射调用方法,或者,您可以使用表达式调用方法,如下所示:

FacesContext fc = getContext();
ExpressionFactory factory = getExpressionFactory();
methodExpression = factory.createMethodExpression(
        fc.getELContext(), "#{phaseListenerBean.compListener}", 
                    Void.class, (Class<?>) null);
methodExpression.invoke(fc.getELContext(), null);

请显示“compListener”和实用程序类的一些代码。对不起,我的英语不好,

干杯

于 2013-03-13T23:18:37.563 回答