1

私はおそらくOmniFacesにあまりにも盲目で新しすぎて、バッキング Bean インスタンスを取得するための基本的なメソッドをAPIで見つけることができませんでした。そのような方法がある場合、どこで見つけることができますか? このように:

public static 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());
}

または、ジェネリックを使用したより動的なバージョン:

public static <T> T 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 (T) expression.getValue(context.getELContext());
}
4

1 に答える 1

2

ほぼそれに似たメソッドがありますが、単純化されたルート式だけでなく、あらゆる種類の式を評価 (および取得) できます。

Faces.evaluateExpressionGetです

次のように使用します。

MyBean myBean = Faces.evaluateExpressionGet("#{myBean}");

たとえば、次のようにMyBean定義されています。

@ViewScoped
@ManagedBean
public class MyBean {
    // ...
}
于 2013-04-27T19:13:50.250 に答える