【问题标题】:JSF dataTable queryJSF 数据表查询
【发布时间】:2009-01-10 15:32:41
【问题描述】:

有人可以帮我处理下面的 JSF 数据表吗?在这里,我从数据库表中获取数据并使用了 dataTable 绑定,但我不知道为什么它会在屏幕上显示 3 次行,但是如果我删除绑定,它只会显示一次。


<h:dataTable binding="#{threadController.dataTable}" var="category" value="#{threadController.queryCategories}" border="1" cellpadding="2" cellspacing="0">
  <h:column>
  <img src="../../images/directory.jpg" alt="Forum Icon" />
  </h:column>
  <h:column>
  <h:form>
  <h:commandLink value="#{category.cname}" action="#{threadController.categoryDateItem}" />
  </h:form>
  </h:column>

// defined globally
private HtmlDataTable dataTable;
private HtmlInputHidden dataItemId = new HtmlInputHidden();


public String categoryDateItem() {
            category = (Category) dataTable.getRowData();
            System.out.println("category action by select: "+category.getCname());
            dataItemId.setValue(category.getId());
            return "editItem"; // Navigation case.
 }

@SuppressWarnings("unchecked")
public ArrayList<Category> getQueryCategories(){    

    return (ArrayList<Category>)HibernateUtil.getSession().createCriteria(Category.class).list();   

}

输出:

            myText   myText   myText

【问题讨论】:

    标签: jsf


    【解决方案1】:

    将此组件绑定到 bean value="#{threadController.queryCategories}" 的绑定表达式。因此 value 属性足以使用 dataTable 标记检索数据。

    【讨论】:

      【解决方案2】:

      Binding = 组件支持 bean

      Value= 数据模型支持 bean

      因此,您正确设置了值和绑定(至少,据我所知)。您的问题可能是由于您没有在 getQueryCategories() 中缓存从数据库返回的列表。

      您真的不知道在呈现该数据表的过程中多久会调用一次 getQueryCategories(),因此最好执行以下操作:

      // Somewhere near the top of the handler class.. create a cache variable:
      private ArrayList<Category> qCategories = null;
      
      // now for getQueryCategories
      public ArrayList<Category> getQueryCategories(){    
            if ( qCategories == null ) {  // qCategories should be a member of the handler
                 qCategories = (ArrayList<Category>)HibernateUtil.getSession().createCriteria(Category.class).list();   
            }
      
            return qCategories
      }
      

      这种缓存在 JSF 应用程序中非常有用,其处理程序是偶数请求范围的会话,因为您无法真正知道 JSF 多久会在 dataTable 中评估您的“值”表达式。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-30
        • 1970-01-01
        • 1970-01-01
        • 2012-04-28
        • 2011-09-04
        相关资源
        最近更新 更多