Jsf 缓存ValueExpression实例

Jsf 缓存ValueExpression实例,jsf,el,Jsf,El,我用JSF编写了一个应用程序,它根据一些配置文件生成一些CRUD页面。要配置这些页面,可以提供参数。它们可以是任何类型,也可以是EL表达式。目前,我为每个getter调用创建并评估这些表达式,这不是理想的解决方案,我认为: 现在我有两个我自己无法回答的简单问题: 应该可以为每个请求缓存这些ValueExpression实例。在我的例子中,在第一次访问时,我使用JSF的postAddToView事件创建表达式,并在每次getter调用中求值 public void populateComponen

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

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

应该可以为每个请求缓存这些ValueExpression实例。在我的例子中,在第一次访问时,我使用JSF的postAddToView事件创建表达式,并在每次getter调用中求值

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中使用表达式相同。这个解决方案有什么我目前没有看到的问题吗

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


我相信你会发现它们已经在幕后被缓存了。每当我实现应用程序端缓存时,我都会后悔。相关阅读食物:这意味着不需要缓存,只需要1,因为这将是请求范围内的缓存,可以/应该这样做吗?