我正在尝试执行以下操作:我有一个网站,并且我的网站中有 jsf 页面。在某些页面中,我有一个数据表,其中填充了数据库中的一些值。我想定期更新这个数据库,以便这些表中的值也会发生变化。当我搜索时,我发现我需要为此使用 quartz 。我正在考虑创建一个托管 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 分钟更新一次。由于我从数据库填充数据表,因此每当用户浏览查看此数据表的页面时,该表都会填充最新更新的数据库值。
最佳答案
要使用数据表内容自动更新数据库,需要定期向服务器发出 AJAX 请求。
除非您向服务器发出请求,否则在服务器端代码上使用多线程不会有帮助。
要发送定期的 AJAX 请求,您可以使用 JS 计时器和 richfaces AJAX 支持组件。
像这样启动计时器...
var pingInterval = 1000; // 1 sec
setInterval(contactServer, pingInterval);
function contactServer(){
// send request to server
}
您可以引用this有关使用 Richfaces 发送 AJAX 请求的各种选项。
关于java - 如何在jsf网站后台运行线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17541969/