2011-03-28 16 views
0

HI, 已使用JSF h:data表 - jsf數據表將空,我的sp返回值,因此getList返回值,但只在瀏覽器中看到標題,表值不見在瀏覽器中。h:dataTable沒有值

以下是我的JSP

<h:panelGrid> 
     <f:facet name="header"> 
      <h:outputText value="Employee Details" /> 
     </f:facet> 
     <h:dataTable value="#{dataTableBean.list}" var="loc" 
      bgcolor="#F1F1F1" border="10" cellpadding="5" cellspacing="3" 
      first="0" rows="5" width="50%"> 
      <h:column> 
       <f:facet name="header"> 
        <h:outputText value="Sponsor ID" /> 
       </f:facet> 
       <h:outputText value="#{loc.sponsorID}" /> 
      </h:column> 
      <h:column> 
       <f:facet name="header"> 
        <h:outputText value="Sponsor Name" /> 
       </f:facet> 
       <h:outputText value="#{loc.sponsorName}" /> 
      </h:column> 
      <h:column> 
       <f:facet name="header"> 
        <h:outputText value="Distributor ID" /> 
       </f:facet> 
       <h:outputText value="#{loc.distributorID}" /> 
      </h:column> 
      <h:column> 
       <f:facet name="header"> 
        <h:outputText value="Distributor Name" /> 
       </f:facet> 
       <h:outputText value="#{loc.distributorName}" /> 
      </h:column> 
     </h:dataTable> 
    </h:panelGrid> 
</h:form> 

MY豆

公共類DataTableBean {

private List<BillTransPay> list; 

public List<BillTransPay> getList() { 
    String SP_BILLPAY = "{call sp_aw_BillTransPay(?,?,?,?,?,?,?)}"; 
    Connection con = null; 
    ResultSet rs = null; 
    try { 
     Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 
        con = java.sql.DriverManager 
       .getConnection(conString); 
     CallableStatement cbls = con 
       .prepareCall("{call sp_aw_BillTransPay(?,?,?,?,?,?,?)}"); 

     cbls.setString(1, "csf"); 
     cbls.setString(2, "20100101"); 
     cbls.setString(3, "20100301"); 
     cbls.setString(4, "B"); 
     cbls.setString(5, "01CS"); 
     cbls.setString(6, "ALL"); 
     cbls.setInt(7, 14000); 
     rs = cbls.executeQuery(); 
     list = new ArrayList<BillTransPay>(); 
     while (rs.next()) { 
      BillTransPay btp = new BillTransPay(); 
      btp.setSponsorID(rs.getString("SponsorCode")); 
      btp.setSponsorName(rs.getString("SponsorName")); 
      btp.setDistributorID(rs.getString("DistID")); 
      btp.setDistributorName(rs.getString("DistName")); 
      list.add(btp); 

     } 

    } catch (Exception ex) { 
     ex.printStackTrace(); 
    } 
    return list; 
} 

public void setList(List<BillTransPay> list) { 
    this.list = list; 
} 

}

faces-config.xml中

**<managed-bean> 
    <managed-bean-name>dataTableBean</managed-bean-name> 
    <managed-bean-class> 
     com.SQLProcess.dto.DataTableBean 
    </managed-bean-class> 
    <managed-bean-scope>request</managed-bean-scope> 
</managed-bean>** 
+0

代碼似乎沒問題。你得到的HTML是什麼?你真的用'List'傳遞了一些東西嗎? – 2011-03-28 10:13:11

+0

只有標題,但sp是返回值。 – 2011-03-28 10:16:11

+0

嘗試在XHTML上使用'getList'或者說'retrieveData'並重構方法名稱 – 2011-03-28 10:17:59

回答

0

只要運行調試器或添加return list;一個System.out.println(list);前右看看,如果該方法被調用和列表真的包含項目。

說的是,這個昂貴的DB作業實在不應該在getter中完成。它可以在請求期間多次調用。你不想不必要地打擊/壓力你的數據庫。將DB作業移動到bean的構造函數中。另外,由於沒有明確地關閉ConnectionStatementResultSet而泄露了數據庫資源。您需要在finally區塊中將它們關閉,因爲您已經獲得了相同的try

+0

非常感謝很多人,sqldriver版本存在問題 - 並且不知道爲什麼我會在頁面被訪問時發生錯誤。但是一旦coreect驅動程序被放置,錯誤消失了。謝謝大家:D – 2011-03-28 14:04:25