java - 如何在jsf网站后台运行线程?

标签 java database jsf jakarta-ee quartz-scheduler

我正在尝试执行以下操作:我有一个网站,并且我的网站中有 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/

相关文章:

php - 如何用php将电影发布到不同的类别?

sql - 按成分名称查找食谱,并尽可能排序

jsf - 如何定位要被 p :blockUI/pe:blockUI? 阻止的整个 JSF 页面

java - 无法确定格式不当的原因

java - JSF-2 a4j :actionParam in one commandlink bug

java - Java 中的递归和堆栈

java - 条件等于的 HashCode

java - Hibernate 难以处理 HQL 中的 '@' 字符

Java 格式字符串间距

database - Jdbc批量更新好的key检索策略