私は次のことをしようとしています: 私はウェブサイトを持っていて、私のウェブサイトに jsf ページがあります。一部のページには、データベースからの値が入力されたDataTableがあります。これらのテーブルの値も変更されるように、このデータベースを定期的に更新したいと考えています。検索したところ、これにはクォーツを使用する必要があることがわかりました。データベースからテーブルを埋めるマネージド Bean を作成し、その Bean でデータベースから値を取得することを考えています。これが私のコード例です:
<h:form>
<rich:extendedDataTable style=" column-width: 174px; width:174px;" value="#{exchangeRates.values}" var="values" id="accountsTable" styleClass="accountsTable" headerClass="accountsTableHeader" rowClasses="accountsTableOddRow,accountsTableEvenRow" >
<rich:column width="40px;">
<f:facet name="header">Currency</f:facet>
#{values.type}
</rich:column>
<rich:column width="45px;">
<f:facet name="header">Alış</f:facet>
#{values.buy}
</rich:column >
<rich:column width="45px;" >
<f:facet name="header">Satış</f:facet>
#{values.sell}
</rich:column>
</rich:extendedDataTable>
この jsf ページのマネージド Bean:
private String value;
private ArrayList<Money> values = new ArrayList<>();
public ArrayList<Money> getValues() {
try {
getCurrentExchangeValue();
} catch (IOException ex) {
Logger.getLogger(ExchangeRates.class.getName()).log(Level.SEVERE, null, ex);
}
return values;
}
private void getCurrentExchangeValue() throws IOException {
//GET THE VALUES FROM THE DATABASE AND
//FILL THE "values" ArrayList
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
ページ内のデータテーブルはこのコードで正常に埋められていますが、定期的に更新されていません。私の質問は、「データベースを手動で更新する」コードをどこに置くべきですか? 別の関数でこのマネージド Bean に配置する必要がありますか? バクグラウンドで別のスレッドを実行する必要があるように感じました。 #{values.buy} のようなものがマネージド Bean を呼び出すたびに、スレッドはデータベースを更新する必要があります。どうすればできますか?
ありがとう
編集:私の質問が明確ではなかったと思うので、ここに要約があります:データベースを定期的に、たとえば10分ごとに更新したいです。データベースからデータテーブルに入力するため、このデータテーブルが表示されているページをユーザーが閲覧するたびに、テーブルには最新の更新されたデータベース値が入力されます。