h:dataTable的奇怪行为

  • 本文关键字:dataTable jsf jsf-2
  • 更新时间 :
  • 英文 :


我使用类似的策略在另一个页面中检索其他类的值,它在那里工作得很好,但在下面的情况下,它没有显示值。

你知道吗?

以下是检索数据库值的方法。

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页面

<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>

如果您没有看到任何检索到的数据或错误的打印,那么这只意味着pictures表是空的。或者,您可能打算将其作为products表。或者你可能没有运行你认为正在运行的代码。

请注意,您在发布的代码中有一个编译错误:

pc.add(i,newProductBean(rs.getInt(1),rs.getString(2)));

但我认为这是在写问题时不小心的打字错误。


与问题无关在getter方法中进行数据库交互是一个非常糟糕的主意。getter在bean的生命周期中可以被调用多次。它应该只归还(预先居住的)财产,而不是做一些本应一次性完成的昂贵的商业工作。将这段代码移到bean构造函数中,最好是以独立类/方法调用的形式。

public TableBean() throws SQLException {
    this.pc = productService.list();
}

一切似乎都很好。也许你可以试试下面的一点:

  1. 用断点标记你的方法,看看该方法是否真的被调用了
  2. 尝试System.out.println(rs.next()),看看它是否为true并且结果集是否已填充

相关内容

  • 没有找到相关文章

最新更新