关键词:
【中文标题】当方法执行更新时刷新延迟加载的 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()
?),当然您应该在该操作完成后更新<p:dataTable>
组件(如果尚未设置,请添加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方法来得到一个对象... 查看详情