2014-12-02 51 views
2

當我使用JDBC方法更新數據庫中的數據時,它將被持久化,但primefaces數據表不會被刷新。刷新頁面不會顯示此更改,但只有在服務器重新啓動並且我的init已被再次調用時纔會看到此更改。在使用此JDBC方法持久保存數據後,是否有辦法讓Primefaces刷新其可數據內容?當方法執行更新時刷新延遲加載的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(); 
     } 
    } 
} 

UPDATE: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; 
    }  

} 
+0

你可以發佈'warehouseManagedBean'的代碼嗎? – 2014-12-02 11:33:57

+0

@PredragMaric我剛剛做到了 – ollaollu 2014-12-02 18:38:06

回答

1

的問題是可能是lazyModel仍然有即使在更新數據庫之後也是如此。嘗試在更新股票(即saveStock() ?,那saveStock()?)後再次調用init(),當然,您應該在該操作完成後更新<p:dataTable>組件(如果尚未設置,請將dataTable的ID添加到調用該按鈕的按鈕的update屬性saveStock())。