0

このタイトルは正確ではないかもしれませんが、ここに問題があります。私はいくつかのJSFプロジェクトを行っていますが、次のものが必要です:

ユーザーがアプリケーションにログオンするとき (つまり、ホームページに移動するとき)、インターネットやデータベースから為替レートを取得するメソッドを呼び出す必要があります。そのメソッド (ページの解析、データの保存など) の実行には、約 5 ~ 6 秒かかります。ログインからホームページへのナビゲーションに 5 ~ 6 秒かかるのは望ましくありません。

1) ユーザーがログインすると、(5 ~ 6 秒後ではなく、すぐに) ホームページが表示され、メソッドがバックグラウンドで動作している間にクリックおよび/またはナビゲートできます。

2)ユーザーがログインすると、ホームページが(すぐに)表示され、ページの一部にロードサインが表示され、メソッドが実行された後、為替レートを含むdataTableが表示されます。

質問は、これを行う方法は? そのメソッドを HomePageBean コンストラクターに入れると、メソッドが実行されるまでページは表示されません。ホームページに非表示の要素を配置して、Getter 内でそのメソッドを呼び出すことができるかもしれませんが、それが正しい方法であるか (ハックのように思えます)、実際に機能するかはわかりません。

私は JSF 2.0 と Primefaces を使用しています。前もって感謝します

4

1 に答える 1

0

以下の例のように ApplicationScoped Bean を使用します。

@ManagedBean(name = "exchRateBean", eager = true)
@ApplicationScoped
public class ExchRateBean  {

  public List<Rate> getRates(Date date) {
    // cached data or DAO methods here
  }

  @PostConstruct
  public void init() {
    // Initial web-app initialization, will run once upon deploy
  }
}

そして、これがアプリケーション スコープの Bean にアクセスするバッキング Bean です。

@RequestScoped
public class MyBean  {
  @ManagedProperty(value="#{exchRateBean}")
  private ExchRateBean exchRateBean;

  // your JSF methods
  public List<Rate> getRates(Date date) {
    return getExchRateBean().getRates(date);
  }

  // G&S
  public ExchRateBean getExchRateBean() {
    return exchRateBean;
  }

  public void setExchRateBean(ExchRateBean exchRateBean) {
    this.exchRateBean = exchRateBean;
  }
}
于 2011-01-11T01:03:36.133 に答える