h:dataTable没有值

时间:2011-03-28 10:05:51

标签: java jsf

HI, 使用过JSF h:data Table - jsf数据表变为空,我的sp返回值,因此getList返回值,但只有标题在浏览器中看到,表值在浏览器中看不到。

以下是我的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 Bean

公共类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>**

1 个答案:

答案 0 :(得分:0)

只需运行调试器或在System.out.println(list);之前添加return list;即可查看该方法是否已被调用且列表确实包含项目。

说,这个昂贵的数据库工作真的不应该在 getter 中完成。它可以在请求期间多次调用。您不希望不必要地压缩/压力您的数据库。将DB作业移动到bean的构造函数中。此外,您未通过明确关闭ConnectionStatementResultSet来泄漏数据库资源。您需要在与获取它们的finally相同的try块中关闭它们。