当方法执行更新时刷新延迟加载的 Primefaces 数据表

     2023-02-23     243

关键词:

【中文标题】当方法执行更新时刷新延迟加载的 Primefaces 数据表【英文标题】:refresh lazy loaded Primefaces datatable when a method performs an update 【发布时间】:2015-01-30 05:16:42 【问题描述】:

当我通过 JDBC 方法更新数据库中的数据时,它会被持久化,但 primefaces 数据表不会被刷新。刷新页面也不会显示此更改,但仅当重新启动服务器并且再次调用我的 init 时才能看到此更改。在我使用这种 JDBC 方法保存数据后,有没有办法让 Primefaces 刷新它的数据表内容?

注意:JDBC 方法不同于为数据库实体执行添加/更新/删除的托管 bean。

我希望我的问题足够清楚。

这是我的数据表:

<p:dataTable value="#warehouseManagedBean.lazyModel" 
var="showStock"
widgetVar="warehouseTable"
rows="10" 
rowsPerPageTemplate="20,30,50" 
paginator="true" 
lazy="true"
paginatorTemplate="CurrentPageReport  FirstPageLink PreviousPageLink PageLinks NextPageLink LastPageLink RowsPerPageDropdown">              
<p:column headerText="Raw Material" sortBy="#showStock.rwcode" filterBy="#showStock.rwcode" filterStyle="display:none; visibility:hidden;"> 
<h:outputText value="#showStock.rwcode"/>
</p:column>
<p:column headerText="Stock Balance">                                         
<h:outputText value="#showStock.quantity"/>
</p:column>
<p:column headerText="Cost">                                        
<h:outputText value="#showStock.cost"/>
</p:column>
<p:column headerText="Value">                                         
<h:outputText value="#showStock.stockValue"><f:convertNumber type="currency" currencySymbol="$"/></h:outputText>
</p:column>
<p:column rendered="false">                                         
<h:outputText value="#showStock.stockid"/>
</p:column>
</p:dataTable>

这是我的 JDBC 方法(如果需要)

public void updateWarehouse(double stockbalance, int id) throws SQLException
conman = new PremierConnection();
String sql = "update warehouse set quantity = ? where stockid = ?";
Connection conn = null;
PreparedStatement stm = null;

try 
    conn = conman.getDBConnection();
    stm = conn.prepareStatement(sql);
    stm.setDouble(1, stockbalance);
    stm.setInt(2, id);
    stm.executeUpdate();            
 catch (SQLException e) 
        System.out.println(e.getMessage());
     finally 
        if (stm != null) 
            stm.close();
        
        if (conn != null) 
            conn.close();
        
    

更新:Warehousemanagedbean

@Named(value = "warehouseManagedBean")
@ViewScoped
public class WarehouseManagedBean implements Serializable

    private LazyDataModel<Warehouse> lazyModel;    
    private Warehouse stock = new Warehouse();

    @EJB
    private WarehouseEJB ejb;

    @PostConstruct
    public void init()
        lazyModel = new LazyWarehouseDataModel(ejb);
        

    public String newStock()
        try 
            stock = ejb.create(stock);
            JsfUtil.addSuccessMessage("Stock created successfully");
         catch (EJBException e)
            JsfUtil.addErrorMessage("Raw material exists");
            return "AddStock.xhtml";
         catch (Exception e) 
                Logger.getLogger(WarehouseManagedBean.class.getName()).log(Level.SEVERE, "Error creating new stock", e);            
        
        return "Warehouse.xhtml";
    

    public String newNextStock()
        try 
            stock = ejb.create(stock);
            JsfUtil.addSuccessMessage("Stock created successfully");            
         catch (EJBException e)
            JsfUtil.addErrorMessage("Raw material exists");
         catch (Exception e) 
                Logger.getLogger(WarehouseManagedBean.class.getName()).log(Level.SEVERE, "Error creating new stock", e);            
        
        return "AddStock.xhtml";
    

    public String saveStock()
        try 
            ejb.edit(stock);
            JsfUtil.addSuccessMessage("Stock updated successfully");
         catch (EJBException e)
            JsfUtil.addErrorMessage("Error updating stock");
            return "EditStock.xhtml";
         catch (Exception e) 
                Logger.getLogger(WarehouseManagedBean.class.getName()).log(Level.SEVERE, "Error updating stock", e);            
        
        return "Warehouse.xhtml";
    

    public void deleteStock(Warehouse stock)
        try 
            ejb.remove(stock);
            JsfUtil.addSuccessMessage("Stock deleted successfully");            
         catch (EJBException e)
            JsfUtil.addErrorMessage("Error deleting stock");
        catch (Exception e) 
                Logger.getLogger(WarehouseManagedBean.class.getName()).log(Level.SEVERE, "Error deleting stock", e);            
        
    

    public Warehouse getStock() 
        return stock;
    

    public List<Warehouse> getWarehouseList() 
        return warehouseList;
    

    public LazyDataModel<Warehouse> getLazyModel() 
        return lazyModel;
        


【问题讨论】:

可以发warehouseManagedBean的代码吗? @PredragMaric 我刚刚做了 【参考方案1】:

问题可能是lazyModel 即使在您更新数据库后仍然有旧数据。更新库存后尝试再次调用init()(是saveStock()?),当然您应该在该操作完成后更新&lt;p:dataTable&gt;组件(如果尚未设置,请添加dataTable的ID到调用saveStock()的按钮的update属性。

【讨论】:

当延迟执行变得困难时,如何分析应用程序?

...序,它依赖于延迟执行。当我对其进行分析时,最耗时的方法是枚举IEnumerables的方法。正因为如此,我认为必须优化的方法不在TopTimeConsuming方法中。你遇 查看详情

当其他更新面板执行时通过触发器刷新更新面板,因为第一个必须具有 UpdateMode=Conditional

】当其他更新面板执行时通过触发器刷新更新面板,因为第一个必须具有UpdateMode=Conditional【英文标题】:RefreshupdatepanelthroughtriggerswhenotherupdatepaneldoesbecausethefirstmusthaveUpdateMode=Conditional【发布时间】:2011-03-0921:04:38【问题描述】... 查看详情

hibernate延迟加载和抓取策略

...加载1.简单查询get,load针对对象本身延迟或即时当使用load方法来得到一个对象时,此时hibernate会使用延迟加载的机制来加载这个对象,即:当我们使用session.load()方法来加载一个对象时,此时并不会发出sql语句,当前得到的这个... 查看详情

ionic上拉刷新为啥自动触发

...Listener一样,但是在header/footer回滚时也会触发。几个常用方法:setPullRefreshEnable(booleanenable):是否允许下拉刷新setPullLoadEnable(booleanenable):是否允许上拉加载stopRefresh():停止刷新,重置headerviewstopLoadMore():停止加载,重置footerview... 查看详情

mybatis_延迟加载

...的压力三种不同的加载类型:1:直接加载:当对一个表执行select语句时,马上对该表所关联的表执行sel 查看详情

小程序刷新页面的方法

...是因为数据有更新,因此要在数据更新后调用刷新页面的方法,来让用户看到新的数据。比如说我现在从购物车里删除了一件商品,我们要让用户看到删除的商品不见了,这个时候就要刷新数据。我看到网上有人说重新调用onLoad... 查看详情

dom树的加载过程

...<script>时,会中断解析,加载<script>文件并立即执行到遇到有defer或async属性的<script>时,会等到所有的defer脚本加载完毕并按照顺序执行(引入顺序),DOMContentLoaded事件调用之前。async脚本的加载不计入DOMContentLoaded... 查看详情

2020-07-31微信小程序数据刷新与重新加载

...面隐藏onUnload 生命周期回调—监听页面卸载1.执行某方法后数据刷新与重新加载  可直接调用onLoad,onShow,onReady方法    this.onLoad(),this.onShow(),this.onReady()  方法执行后会重新调用对应的执行方法,... 查看详情

hibernate脏检查和刷新缓存机制

...要接口,它提供了基本的保存,更新,删除和加载java对象的方法,Session具有一个缓存,可以管理和追踪所有持久化对象,对象和数据库中的相关记录对应,在某些时间点,Session会根据缓存中对象的变化来执行相关SQL语句,将对象包含的变化... 查看详情

firebase 身份验证在刷新时延迟

...不会在立即执行功能时保持身份验证状态。我有一个解决方法,但它很粗略。我的反应路由使用onEnter函数来确定用户是否经过身份验证。比如<Routepath="/secure"component=Dashboa 查看详情

延迟加载javascript/css工具:lazyload(代码片段)

...lazyload.js (fullsource)lazyload下载地址:BootCNDlazyloadjs使用方法使用LazyLoad很简单。只需调用适当的方法css():来加载cssjs():来加载JavaScript并传入要加载的URL或URL数组。如果希望在资源完成加载时得到通知,还可以提供回调函数,... 查看详情

符号延迟加载

当我们在windbg里执行lm指令后,回见到如下情况: 有的模块名后面跟的时pdbsymbols,表示已加载符号,且后面还跟着符号的详细路径。有的模块后面跟着的是deferred,表示模块已经加载,但是调试器还没有尝试加载它的符号。符... 查看详情

eureka源码分析(六)timedsupervisortask

...。我们知道,检测节点状态是ScheduledExecutorService的schedule方法,那么定时检测节点状态的任务是怎么执行的呢,答案就是TimedSupervisorTask。我们先来看下TimedSupervisorTask都有哪些属性TimedSupervisorTask执行时,提交task到executor执行任务... 查看详情

延迟 TitledBorder 标题更新/刷新,为啥?

...JPanelA,在JPanelB和JTabbedPanelC内有一个标题边框。我有一个方法来刷新A和B的内容,它会不时调用。不幸的是,A和B的所有项目都及时刷新,但 查看详情

hibernate延迟加载

...减少查询的数据量。简言之,是当在真正需要数据时,才执行Sql语句进行查询。 二、如何配置延迟加载在Hibernate中通过.hbm配置文 查看详情

hibernate延迟加载

...减少查询的数据量。简言之,是当在真正需要数据时,才执行Sql语句进行查询。 二、如何配置延迟加载在Hibernate中通过.hbm配置文 查看详情

hhibernate延迟加载

...减少查询的数据量。简言之,是当在真正需要数据时,才执行Sql语句进行查询。 二、如何配置延迟加载在Hibernate中通过.hbm配置文 查看详情

hibernate延迟加载(get和load的区别)(转)

...得到一个对象,通常有两种方式,一种是通过session.get()方法,另一种就是通过session.load()方法,然后其实这两种方法在获得一个实体对象时是有区别的,在查询性能上两者是不同的。一.load加载方式当使用load方法来得到一个对象... 查看详情