【问题标题】:h:dataTable has no valueh:dataTable 没有值
【发布时间】:2011-03-28 10:05:50
【问题描述】:

嗨, 已使用 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>

我的豆子

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

【问题讨论】:

  • 代码似乎没问题。你得到什么作为 HTML ?你真的在使用List 传递一些东西吗?
  • 只有标题,但 sp 是返回值。
  • 尝试在 XHTML 上使用 getList 或说 retrieveData 并重构方法名称
  • 如果我尝试 getList - 我收到以下错误 javax.servlet.ServletException: /JSP/dataTableDemo.jsp(15,3) '#{dataTableBean.getList}' Property 'getList' not found on输入 com.SQLProcess.dto.DataTableBean javax.faces.webapp.FacesServlet.service(FacesServlet.java:256)
  • 我会尝试从 getter 方法中删除数据获取(将它放在构造函数中,因为它是一个请求范围的 bean)。让getter只返回构造函数填充的列表。

标签: java jsf


【解决方案1】:

只需运行调试器或在return list; 之前添加一个System.out.println(list); 以查看该方法是否被调用并且列表真的 包含项目。

也就是说,这个昂贵的数据库工作真的不应该在 getter 中完成。在请求期间可以多次调用它。您不想不必要地打击/强调您的数据库。将 DB 作业移动到 bean 的构造函数中。此外,由于未明确关闭ConnectionStatementResultSet,您正在泄漏数据库资源。您需要在与您获取它们的位置相同的tryfinally 块中关闭它们。

【讨论】:

  • 非常感谢大家,sqldriver 版本有问题 - 并且知道为什么我会收到任何错误,当页面被访问时。但是一旦放置了 coreect 驱动程序,错误就消失了。谢谢大家:D
猜你喜欢
  • 1970-01-01
  • 2011-04-05
  • 1970-01-01
  • 2016-10-26
  • 1970-01-01
  • 2012-11-22
  • 2011-11-20
  • 2011-03-23
  • 1970-01-01
相关资源
最近更新 更多