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>**
答案 0 :(得分:0)
只需运行调试器或在System.out.println(list);
之前添加return list;
即可查看该方法是否已被调用且列表确实包含项目。
说,这个昂贵的数据库工作真的不应该在 getter 中完成。它可以在请求期间多次调用。您不希望不必要地压缩/压力您的数据库。将DB作业移动到bean的构造函数中。此外,您未通过明确关闭Connection
,Statement
和ResultSet
来泄漏数据库资源。您需要在与获取它们的finally
相同的try
块中关闭它们。