Java JSF:如何在另一个会话bean的基础上更新一个会话bean?

Java JSF:如何在另一个会话bean的基础上更新一个会话bean?,java,session,jsf,Java,Session,Jsf,我目前正在修改一些jsf应用程序。我有两颗豆子 连接豆 乌豆 当我第一次在connectionBean中设置连接参数时,UIBean能够读取我的connectionBean信息并显示正确的UI树 但是,当我尝试在同一会话中设置连接参数时。我的UIBean仍将使用以前的connectionBean信息 它只有在我使整个httpSession无效后才会使用 我可以让一个会话bean更新另一个会话bean吗?听起来好像UIBean引用过时版本的ConnectionBean有点问题。这是JSF的一个

我目前正在修改一些jsf应用程序。我有两颗豆子

  • 连接豆
  • 乌豆
当我第一次在connectionBean中设置连接参数时,UIBean能够读取我的connectionBean信息并显示正确的UI树

但是,当我尝试在同一会话中设置连接参数时。我的UIBean仍将使用以前的connectionBean信息

它只有在我使整个httpSession无效后才会使用


我可以让一个会话bean更新另一个会话bean吗?

听起来好像UIBean引用过时版本的ConnectionBean有点问题。这是JSF的一个问题——如果重新创建bean,JSF将不会更新所有其他bean中的引用

您可以尝试每次都获取ConnectionBean的“新”副本。以下方法将按名称检索支持bean:

protected Object getBackingBean( String name )
{
    FacesContext context = FacesContext.getCurrentInstance();

    return context
            .getApplication().createValueBinding( String.format( "#{%s}", name ) ).getValue( context );
}
如果不知道代码的细节以及如何使用bean,就很难做到更具体

@Phill Sacre getApplication().createValueBinding现在已不推荐使用。在JSF 1.2中使用此函数。为了得到一份新的豆子

protected Object getBackingBean( String name )
{
    FacesContext context = FacesContext.getCurrentInstance();

    Application app = context.getApplication();

    ValueExpression expression = app.getExpressionFactory().createValueExpression(context.getELContext(),
            String.format("#{%s}", name), Object.class);

    return expression.getValue(context.getELContext());
}

在第一个会话bean中定义常量和静态方法:

public class FirstBean {

public static final String MANAGED_BEAN_NAME="firstBean";

/**
 * @return current managed bean instance
 */
public static FirstBean getCurrentInstance()
{
  FacesContext context = FacesContext.getCurrentInstance();
  return (FirstBean) context.getApplication().evaluateExpressionGet(context, "#{" + FirstBean.MANAGED_BEAN_NAME + "}", TreeBean.class);
}  
...
而不是像这样在第二个会话bean中使用:

...  
FirstBean firstBean = FirstBean.getCurrentInstance();  
...

更好的方法是使用一些依赖注入框架,如JSF 2或Spring。

bean是否共享连接参数,或者UIBean是否引用了connectionBean?这是供应商代码,我不确定是否可以与大家免费共享。UIBean有一个对connectionBean的引用