缓存ValueExpression实例

时间:2015-10-15 07:29:50

标签: jsf el

我在JSF中编写了一个应用程序,它根据一些配置文件生成一些CRUD页面。要配置这些页面,可以提供参数。它们可以是任何类型,也可以是EL表达式。目前,我为每个getter-invocation创建并评估这些表达式,我认为这不是理想的解决方案:

现在我有两个简单的问题,我无法自己回答:

  1. 应该可以为每个请求缓存那些ValueExpression实例。在第一次访问时(在我的情况下,我使用JSF' s postAddToView事件)我创建表达式并在每个getter-invokation中进行评估。

    public void populateComponent(ComponentSystemEvent event) {
        FacesContext context = FacesContext.getCurrentContext();
        _valueExpression = context.getApplication().getExpressionFactory()
                .createValueExpression(context.getELContext(), _expression, String.class);
    }
    
    public String getExpressionValue() {
        FacesContext context = FacesContext.getCurrentContext();
        return (String) _valueExpression.getValue(context.getELContext())
    }
    

    这应该与在JSF本身处理的XHTML中直接使用表达式相同。 目前我还没有看到此解决方案的任何问题?

  2. 是否也可以创建一次ValueExpression实例并将其用于所有请求?缓存将位于应用程序级别而不是每个请求。这将删除postAddToView事件并将该逻辑移动到我的配置解析器(可以访问FacesContext)。或者,如果在多个请求/线程中使用单个值表达式,我可能会遇到任何副作用吗?

0 个答案:

没有答案