ゲッターとセッターが呼び出された後(2回)にビジネスロジックを記述したいと思います。これは、ビジネスロジック内でそれらのオブジェクト値を使用するためです。ただし、Construct、Post構文、actionevents、..はゲッターの前に呼び出されます。
では、ゲッター内にビジネスロジックを記述したくない場合、ゲッターの値をどのように使用できますか?
ゲッターとセッターが呼び出された後(2回)にビジネスロジックを記述したいと思います。これは、ビジネスロジック内でそれらのオブジェクト値を使用するためです。ただし、Construct、Post構文、actionevents、..はゲッターの前に呼び出されます。
では、ゲッター内にビジネスロジックを記述したくない場合、ゲッターの値をどのように使用できますか?
あなたは自分の考えに基本的な間違いを犯しています。
「ゲッターズ」のようなフェーズはありません。ゲッターは、Beanのプロパティを読み取るための単なる慣例です。
これらのプロパティは、リクエスト全体を通して個別に読み取ることができます。早ければ「ビューの作成/復元」中に相談されるものもあれば、「応答のレンダリング」中に相談されるものもあります。
ある特定のフェーズでJSFがコードをスイープし、その楽しみのために、見つけたすべてのゲッターを呼び出すようなことはありません。
あなたのための解決策は、この考えを手放すことです。本当だと思うことを手放すのは難しいかもしれませんが、吸い込み、心を澄ませ、物事がどのように機能するかについての現在の理解に別れを告げ、最初からやり直してください。
そうすれば、すぐに答えを見つけることができます。幸運を!
サイトに移動して、outputTextに表示されるデータベースからデータを取得したいと思います。
Beanの(ポスト)コンストラクターで作業を行います。
@ManagedBean
@RequestScoped
public class Bean {
private String data;
@EJB
private SomeService service;
@PostConstruct
public void init() {
data = service.load();
}
// Getter.
}
と
<h:outputText value="#{bean.data}" />
(primefaces)selectOneMenu値を変更すると、BeanはselectOneMenuの値を取得し、データベースでこの値のクエリを実行し、クエリ結果をoutputText内に書き込みます。
change
入力コンポーネントのイベントにアタッチされているBeanのajaxリスナーメソッドでジョブを実行します。
@ManagedBean
@ViewScoped
public class Bean {
private String selectedItem;
private String result;
@EJB
private SomeService service;
public void changeSelectedItem(AjaxBehaviorEvent event) {
result = service.find(selectedItem);
}
// Getters+setter.
}
と
<p:selectOneMenu value="#{bean.selectedItem}">
<f:selectItems ... />
<p:ajax listener="#{bean.changeSelectedItem}" update="result" />
</p:selectOneMenu>
<h:outputText id="result" value="#{bean.result}" />
ゲッターが呼び出された後にそれを行うのは遅すぎるでしょう。JSFは、その時点でHTML出力のレンダリングをすでに終了しています。後でHTML出力を変更することはできません。
あなたの質問を完全には理解していませんでしたが、明白な方法はゲッターとセッターにロジックを入れることです。