我使用类似的策略来检索另一个页面中的值与其他类,它在那里工作正常但在下面的情况下它没有显示值。
请问好吗?
以下是检索数据库值的方法。
public List<ProductBean> getPc() {
int i = 0;
Connection conn = null;
PreparedStatement pstmt = null;
// if(FacesContext.getCurrentInstance().getRenderResponse())
List<ProductBean> pc= new ArrayList<ProductBean>();
try {
conn = getVConnection();
String query = "select * from pictures";
pstmt = conn.prepareStatement(query);
//pstmt.setInt(1,this.id);
rs = pstmt.executeQuery();
while(rs.next())
{
System.out.println(rs.getInt(1));
System.out.println(rs.getString(2));
pc.add(i,newProductBean(rs.getInt(1),rs.getString(2)));
i++;
}
pstmt.close();
rs.close();
conn.close();
}catch (Exception e)
{
e.printStackTrace();
System.out.println("Error Data : " + e.getMessage());
}
return pc;
}
以下是jsf page
<h:dataTable styleClass="panelGridColums" value="#{tableBean.pc}" var="p" border="1" >
<h:column>
<f:facet name="header">Product no</f:facet>
<h:outputText value="#{p.productNo}"/>
</h:column>
<h:column>
<f:facet name="header">Product name</f:facet>
<h:outputText value="#{p.p2name}"/>
</h:column>
</h:dataTable>
答案 0 :(得分:1)
如果您没有看到检索到的数据或错误的任何打印,那么它只是意味着pictures
表为空。或许你打算将它作为products
表。或许你没有运行你认为正在运行的代码。
请注意,您在发布的代码中出现了编译错误:
pc.add(i,newProductBean(rs.getInt(1),rs.getString(2)));
但是在构思这个问题时我会认为这是一个粗心的错字。
无关问题,在getter方法中执行数据库交互作业是一个非常糟糕的主意。在bean的生命中可以多次调用getter。它应该单独归还(预先填充)的财产,而不是做一些应该一次完成的昂贵的业务工作。将该段代码移动到bean构造函数中,最好是独立的类/方法调用。
public TableBean() throws SQLException {
this.pc = productService.list();
}
答案 1 :(得分:1)