3

複合コンポーネントのインスタンスにプライベートで、そのインスタンスが存続する限り存続する「コンポーネントスコープ」Bean、つまり「複合コンポーネント内のローカル変数」をどのように作成できるのか疑問に思いました。

以下に詳細を示し、例を示します。

「計算機」コンポーネントがあるとします。これは、ユーザーが数式を入力し、その値を評価できるようにするものです。オプションで、関連する関数もプロットします。

次のような複合コンポーネントを作成できます。

  • 数式を受け入れるためのテキストボックス
  • 「評価」と「プロット」という2つのボタン
  • 関数をプロットする別のネストされたコンポーネント

それは明らかに自己完結型の機能です。使用したい人が<math:expressionEvaluator/>と言うだけでよいように

しかし、明らかに、実装にはJavaオブジェクト(式を評価するもの、プロットポイントを計算するものなど)が必要です。これは、ビュースコープではなく、このコンポーネントのこのインスタンス専用のBeanである可能性があると思います。または、コンポーネントのすべてのインスタンス間で共有されるリクエストスコープのBean。

どうすればそのようなBeanを作成できますか?それは複合コンポーネントでも可能ですか?

4

2 に答える 2

1

「コンポーネントごとのインスタンス」スコープはありません。しかし、あなたはまだあなたの望む効果を達成することができます。

ViewScoped Beanを使用して、評価とプロットを行います。これらの関数は「ステートレス」であるため、入力によって供給されます。

入力は、ユーザー提供のBeanによってサポートされます。同じように、テキストボックスまたはカレンダーウィジェットには、ユーザー提供のBeanにバインドされた入力ボックスが必要です。これは、「ステートレス」ビュースコープBeanが作用するデータを保持します。

コンポーネントに含まれるすべてのものを本当に保持したい場合は、入力IDでキー設定されたマップを含むViewScopedBeanを使用して入力をバックアップできると思います。それでもうまくいくかどうかはわかりません。

于 2010-06-09T04:16:57.307 に答える
0

または、カスタムJavaベースのUIComponentを作成することもできます。これらはJSF1.xではばかげた量の「可動部品」を必要としましたが、JSF 2.0とFaceletsでは、実際にはそれほど多くの作業を構築する必要はありません。

通常、カスタムJavaベースのUIComponentsの構築は中程度である必要があります。ほとんどのユースケースでは、複合コンポーネントの方が簡単でわかりやすいためです。ただし、JavaベースのUIComponentsはまだ使用されており、実際の計算を行うことはそのような使用法である可能性があります。

于 2011-02-13T13:44:19.123 に答える