2009-09-04 3 views
1

У меня есть простой проект CRUD, в котором я использую richfaces и toplink для. Я заметил, что некоторые из страниц загружаются довольно медленно, поэтому я включил уровень ведения журнала для добавления в FINE. При загрузке моей страницы, в которой перечислены все мои объекты курса в rich: datatable, toplink, похоже, выполняет тот же самый выбор всего запроса 9 раз. При использовании rich: datascroller для перехода к следующему набору из 50 элементов или сортировке столбца, он снова запускает тот же самый запрос на выбор еще 18 раз.Richfaces нечаянно попадает в базу данных

Вот DataTable:

<rich:dataTable value="#{CourseController.courses}" 
         id="table" 
         var="dataTableItem" 
         rendered="#{CourseController.courses.rowCount>0}" 
         rows="50" 
         onRowMouseOut="this.style.backgroundColor='#{a4jSkin.tableBackgroundColor}'" 
         onRowMouseOver="this.style.backgroundColor='#dcdcdc'"> 
      <f:facet name="header"> 
       <h:outputText value="Courses"/> 
      </f:facet> 
      <rich:column sortBy="#{dataTableItem.id}"> 
       <f:facet name="header"> 
        <h:outputText value="ID"/> 
       </f:facet> 
       <h:commandLink action="#{CourseController.viewCourse}"> 
        <h:outputText value="#{dataTableItem.id}" /> 
        <f:param name="id" value="#{dataTableItem.id}" /> 
       </h:commandLink> 
      </rich:column> 
      <rich:column sortBy="#{dataTableItem.name}"> 
       <f:facet name="header"> 
        <h:outputText value="Name"/> 
       </f:facet> 
       <h:outputText value="#{dataTableItem.name}" /> 
      </rich:column>   
      <rich:column sortBy="#{dataTableItem.owner}"> 
       <f:facet name="header"> 
        <h:outputText value="Owner"/> 
       </f:facet> 
       <h:outputText value="#{dataTableItem.owner}" /> 
      </rich:column> 
      <rich:column rendered="#{LoginController.inSystemAdminGroup || LoginController.inOperationsManagerGroup || LoginController.inLogisticsCoordinatorGroup}"> 
       <f:facet name="header"> 
        <h:outputText value=""/> 
       </f:facet> 
       <h:commandLink action="#{CourseController.editCourse}"> 
        <h:outputText value="Edit/Delete"/> 
        <f:param name="id" value="#{dataTableItem.id}" /> 
       </h:commandLink> 
      </rich:column> 
      <f:facet name="footer"> 
       <rich:datascroller id="datascroller" /> 
      </f:facet> 
     </rich:dataTable> 

Функция в мой контроллер, который называется таблицей:

public DataModel getCourses() { 
     System.out.println("Im in getCourses. Fun Fun Fun."); 
     model = new ListDataModel(courseFacade.findAll()); 
     return model; 
    } 

функция в моей фасоли, которые получают называется по getCourses() функция:

public List<Course> findAll() { 
     System.out.println("Selectin all the courses in the freaking database!!!!!!!!!!!!!!!!!!!!!!"); 
     Query q = em.createQuery("select object(o) from Course as o WHERE o.deleted = FALSE ORDER BY o.name"); 
     List<Course> courses = q.getResultList(); 
     return courses; 
    } 

И мой выход на консоль при загрузке страницы со стола:

Im in getCourses. Fun Fun Fun. 
Selectin all the courses in the freaking database!!!!!!!!!!!!!!!!!!!!!! 
SELECT ID, MODIFIEDBY, ACRONYM, EMSID, DELETED, REMINDEREMAILTEXT, DATEADDED, NUMDAYSREMINDER, DATEDELETED, ADHOC, DATEMODIFIED, ADDEDBY, OWNER, DELETEDBY, OPTLOCK, NAME FROM COURSE WHERE (DELETED = ?) ORDER BY NAME ASC 
     bind => [false] 
Im in getCourses. Fun Fun Fun. 
Selectin all the courses in the freaking database!!!!!!!!!!!!!!!!!!!!!! 
SELECT ID, MODIFIEDBY, ACRONYM, EMSID, DELETED, REMINDEREMAILTEXT, DATEADDED, NUMDAYSREMINDER, DATEDELETED, ADHOC, DATEMODIFIED, ADDEDBY, OWNER, DELETEDBY, OPTLOCK, NAME FROM COURSE WHERE (DELETED = ?) ORDER BY NAME ASC 
     bind => [false] 
Im in getCourses. Fun Fun Fun. 
Selectin all the courses in the freaking database!!!!!!!!!!!!!!!!!!!!!! 
SELECT ID, MODIFIEDBY, ACRONYM, EMSID, DELETED, REMINDEREMAILTEXT, DATEADDED, NUMDAYSREMINDER, DATEDELETED, ADHOC, DATEMODIFIED, ADDEDBY, OWNER, DELETEDBY, OPTLOCK, NAME FROM COURSE WHERE (DELETED = ?) ORDER BY NAME ASC 
     bind => [false] 
Im in getCourses. Fun Fun Fun. 
Selectin all the courses in the freaking database!!!!!!!!!!!!!!!!!!!!!! 
SELECT ID, MODIFIEDBY, ACRONYM, EMSID, DELETED, REMINDEREMAILTEXT, DATEADDED, NUMDAYSREMINDER, DATEDELETED, ADHOC, DATEMODIFIED, ADDEDBY, OWNER, DELETEDBY, OPTLOCK, NAME FROM COURSE WHERE (DELETED = ?) ORDER BY NAME ASC 
     bind => [false] 
Im in getCourses. Fun Fun Fun. 
Selectin all the courses in the freaking database!!!!!!!!!!!!!!!!!!!!!! 
SELECT ID, MODIFIEDBY, ACRONYM, EMSID, DELETED, REMINDEREMAILTEXT, DATEADDED, NUMDAYSREMINDER, DATEDELETED, ADHOC, DATEMODIFIED, ADDEDBY, OWNER, DELETEDBY, OPTLOCK, NAME FROM COURSE WHERE (DELETED = ?) ORDER BY NAME ASC 
     bind => [false] 
Im in getCourses. Fun Fun Fun. 
Selectin all the courses in the freaking database!!!!!!!!!!!!!!!!!!!!!! 
SELECT ID, MODIFIEDBY, ACRONYM, EMSID, DELETED, REMINDEREMAILTEXT, DATEADDED, NUMDAYSREMINDER, DATEDELETED, ADHOC, DATEMODIFIED, ADDEDBY, OWNER, DELETEDBY, OPTLOCK, NAME FROM COURSE WHERE (DELETED = ?) ORDER BY NAME ASC 
     bind => [false] 
Im in getCourses. Fun Fun Fun. 
Selectin all the courses in the freaking database!!!!!!!!!!!!!!!!!!!!!! 
SELECT ID, MODIFIEDBY, ACRONYM, EMSID, DELETED, REMINDEREMAILTEXT, DATEADDED, NUMDAYSREMINDER, DATEDELETED, ADHOC, DATEMODIFIED, ADDEDBY, OWNER, DELETEDBY, OPTLOCK, NAME FROM COURSE WHERE (DELETED = ?) ORDER BY NAME ASC 
     bind => [false] 
Im in getCourses. Fun Fun Fun. 
Selectin all the courses in the freaking database!!!!!!!!!!!!!!!!!!!!!! 
SELECT ID, MODIFIEDBY, ACRONYM, EMSID, DELETED, REMINDEREMAILTEXT, DATEADDED, NUMDAYSREMINDER, DATEDELETED, ADHOC, DATEMODIFIED, ADDEDBY, OWNER, DELETEDBY, OPTLOCK, NAME FROM COURSE WHERE (DELETED = ?) ORDER BY NAME ASC 
     bind => [false] 
Im in getCourses. Fun Fun Fun. 
Selectin all the courses in the freaking database!!!!!!!!!!!!!!!!!!!!!! 
SELECT ID, MODIFIEDBY, ACRONYM, EMSID, DELETED, REMINDEREMAILTEXT, DATEADDED, NUMDAYSREMINDER, DATEDELETED, ADHOC, DATEMODIFIED, ADDEDBY, OWNER, DELETEDBY, OPTLOCK, NAME FROM COURSE WHERE (DELETED = ?) ORDER BY NAME ASC 
     bind => [false] 

ответ

2

Спецификация JSF не гарантирует, что геттеры вызываются только один раз на запрос жизненного цикла, не помещайте дорогой код в геттеры (т. вы делаете запрос и создаете datamodel при каждом вызове getCourses, спецификация JSF позволяет вызывать этот метод столько, сколько требуется для каждой заявки).

+0

Есть ли наилучшая практика для отображения всех предметов, как я пытаюсь это сделать? Должен ли я хранить мои объекты в памяти, а также хранить их в базе данных? Одновременно у меня будет несколько пользователей, редактирующих эти элементы, поэтому мне нужно сохранить синхронизацию. – KevMo

+0

Я использовал, чтобы добавить явную кнопку 'refresh', которая попадает в db до тех пор, пока я не начну использовать Seam, теперь я использую модель события шва и outjection. – shipmaster

 Смежные вопросы

  • Нет связанных вопросов^_^