0

現在、いくつかの jsf アプリケーションを変更しています。私は2つの豆を持っています。

  • connectionBean
  • UIBean

初めて connectionBean に接続パラメータを設定すると、UIBean は connectionBean 情報を読み取って、正しい UI ツリーを表示できます。

ただし、同じセッションで接続パラメーターを設定しようとすると。私の UIBean は以前の connectionBean 情報を引き続き使用します。

httpSession全体を無効にした後にのみ使用されます。

あるセッション Bean で別のセッション Bean を更新する方法はありますか?

4

3 に答える 3

1

@Phill Sacre getApplication().createValueBinding は非推奨になりました。JSF 1.2 の代わりにこの関数を使用してください。Bean の新しいコピーを取得します。

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());
}
于 2009-06-01T09:16:46.310 に答える
1

古いバージョンの ConnectionBean を参照する UIBean に何らかの問題があるように思えます。これは JSF の問題の 1 つです。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 の使用方法を知らなければ、より具体的にすることは困難です。

于 2008-11-13T09:03:10.060 に答える
0

最初のセッション 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);
}  
...

次のように 2 番目のセッション Bean で使用するよりも:

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

より良いアプローチは、JSF 2 や Spring などの依存性注入フレームワークを使用することです。

于 2012-02-15T14:29:12.590 に答える