JSF dataTable query - PullRequest
       7

JSF dataTable query

0 голосов
/ 10 января 2009

Может ли кто-нибудь помочь мне со следующей таблицей данных 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

Ответы [ 2 ]

2 голосов
/ 12 января 2009

Выражение привязки для привязки этого компонента к значению bean-компонента = "# {threadController.queryCategories}". Таким образом, атрибут value достаточен для извлечения данных с использованием тега dataTable.

0 голосов
/ 19 января 2009

Binding = компонентный компонент

Значение = компонент поддержки данных модели

Итак, у вас правильно установлены значения и привязки (по крайней мере, насколько я вижу). Ваша проблема может быть связана с тем, что вы не кэшируете список, который вы возвращаете из базы данных в getQueryCategories ().

Вы действительно не можете представить, как часто будет вызываться getQueryCategories () в процессе рендеринга этого dataTable, поэтому неплохо сделать что-то вроде этого:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...