2013-02-22 5 views
0

У меня есть база данных с именем ball, и у нее есть ID и имя.Как загрузить данные в datalist

Я создал объект и JSF страницы, используя CRUD

путем добавления

<h:form> 
    <h:dataTable id="btable" value="#{ballController.items}" var="item"> 
     <h:column> 
      <h:outputText value="#{item.id}"/> 
     </h:column> 
     <h:column> 
      <h:outputText value="#{item.bname}"/> 
     </h:column> 
    </h:dataTable> 
</h:form> 

на моей странице отображается список DATAS в базе данных, идентификатор и имя.

я попытался отладки сгенерированного кода и ballController.items вызовов:

public DataModel getItems() { 
    if (items == null) { 
     items = getPagination().createPageDataModel(); 
    } 
    return items; 
} 

генерировать ДАННЫЕ в DataTable.

но нет способа перезагрузить данные.

я попытался создать кнопку

<h:commandButton action="#{ballCOntroller.getItems}" value="test"> 
     <f:ajax execute="@form" render="btable" /> 
</h:commandButton> 

выполнить GetItems, в тесте чтобы перезагрузить DataTable, но он не работает.

Я уверен, что мне нужно создать другой метод для этого, но я не уверен, с чего начать. мне нужно запросить базу данных и вернуть список? для генерации данных?

* EDIT

контроллер:

@ManagedBean(name = "ballController") 
@ViewScoped 
public class ballController implements Serializable { 

    private ball current; 
    private DataModel items = null; 
    @EJB 
    private ballFacade ejbFacade; 
    private PaginationHelper pagination; 
    private int selectedItemIndex; 

    public ballController() { 
    } 

    public ball getSelected() { 
     if (current == null) { 
      current = new ball(); 
      selectedItemIndex = -1; 
     } 
     return current; 
    } 

    private ballFacade getFacade() { 
     return ejbFacade; 
    } 

    public PaginationHelper getPagination() { 
     if (pagination == null) { 
      pagination = new PaginationHelper(10) { 
       @Override 
       public int getItemsCount() { 
        return getFacade().count(); 
       } 

       @Override 
       public DataModel createPageDataModel() { 
        return new ListDataModel(getFacade().findRange(new int[]{getPageFirstItem(), getPageFirstItem() + getPageSize()})); 
       } 
      }; 
     } 
     return pagination; 
    } 

    public String prepareList() { 
     recreateModel(); 
     return "List"; 
    } 

    public String prepareView() { 
     current = (ball) getItems().getRowData(); 
     selectedItemIndex = pagination.getPageFirstItem() + getItems().getRowIndex(); 
     return "View"; 
    } 

    public String prepareCreate() { 
     current = new ball(); 
     selectedItemIndex = -1; 
     return "index"; 
    } 

    public String create() { 
     try { 

      getFacade().create(current); 
      JsfUtil.addSuccessMessage(ResourceBundle.getBundle("/Bundle").getString("ballCreated")); 
      return prepareCreate(); 
//   return null; 
     } catch (Exception e) { 
      JsfUtil.addErrorMessage(e, ResourceBundle.getBundle("/Bundle").getString("PersistenceErrorOccured")); 
      return null; 
     } 
    } 

    public String prepareEdit() { 
     current = (ball) getItems().getRowData(); 
     selectedItemIndex = pagination.getPageFirstItem() + getItems().getRowIndex(); 
     return "Edit"; 
    } 

    public String update() { 
     try { 
      getFacade().edit(current); 
      JsfUtil.addSuccessMessage(ResourceBundle.getBundle("/Bundle").getString("ballUpdated")); 
      return "View"; 
     } catch (Exception e) { 
      JsfUtil.addErrorMessage(e, ResourceBundle.getBundle("/Bundle").getString("PersistenceErrorOccured")); 
      return null; 
     } 
    } 

    public String destroy() { 
     current = (ball) getItems().getRowData(); 
     selectedItemIndex = pagination.getPageFirstItem() + getItems().getRowIndex(); 
     performDestroy(); 
     recreatePagination(); 
     recreateModel(); 
     return "List"; 
    } 

    public String destroyAndView() { 
     performDestroy(); 
     recreateModel(); 
     updateCurrentItem(); 
     if (selectedItemIndex >= 0) { 
      return "View"; 
     } else { 
      // all items were removed - go back to list 
      recreateModel(); 
      return "List"; 
     } 
    } 

    private void performDestroy() { 
     try { 
      getFacade().remove(current); 
      JsfUtil.addSuccessMessage(ResourceBundle.getBundle("/Bundle").getString("ballDeleted")); 
     } catch (Exception e) { 
      JsfUtil.addErrorMessage(e, ResourceBundle.getBundle("/Bundle").getString("PersistenceErrorOccured")); 
     } 
    } 

    private void updateCurrentItem() { 
     int count = getFacade().count(); 
     if (selectedItemIndex >= count) { 
      // selected index cannot be bigger than number of items: 
      selectedItemIndex = count - 1; 
      // go to previous page if last page disappeared: 
      if (pagination.getPageFirstItem() >= count) { 
       pagination.previousPage(); 
      } 
     } 
     if (selectedItemIndex >= 0) { 
      current = getFacade().findRange(new int[]{selectedItemIndex, selectedItemIndex + 1}).get(0); 
     } 
    } 

    public DataModel getItems() { 
     if (items == null) { 
      items = getPagination().createPageDataModel(); 
     } 
     return items; 

    } 

    private void recreateModel() { 
     items = null; 
    } 

    private void recreatePagination() { 
     pagination = null; 
    } 

    public String next() { 
     getPagination().nextPage(); 
     recreateModel(); 
     return "List"; 
    } 

    public String previous() { 
     getPagination().previousPage(); 
     recreateModel(); 
     return "List"; 
    } 

    public SelectItem[] getItemsAvailableSelectMany() { 
     return JsfUtil.getSelectItems(ejbFacade.findAll(), false); 
    } 

    public SelectItem[] getItemsAvailableSelectOne() { 
     return JsfUtil.getSelectItems(ejbFacade.findAll(), true); 
    } 

    @FacesConverter(forClass = ball.class) 
    public static class ballControllerConverter implements Converter { 

     public Object getAsObject(FacesContext facesContext, UIComponent component, String value) { 
      if (value == null || value.length() == 0) { 
       return null; 
      } 
      ballController controller = (ballController) facesContext.getApplication().getELResolver(). 
        getValue(facesContext.getELContext(), null, "ballController"); 
      return controller.ejbFacade.find(getKey(value)); 
     } 

     java.lang.Integer getKey(String value) { 
      java.lang.Integer key; 
      key = Integer.valueOf(value); 
      return key; 
     } 

     String getStringKey(java.lang.Integer value) { 
      StringBuffer sb = new StringBuffer(); 
      sb.append(value); 
      return sb.toString(); 
     } 

     public String getAsString(FacesContext facesContext, UIComponent component, Object object) { 
      if (object == null) { 
       return null; 
      } 
      if (object instanceof ball) { 
       ball o = (ball) object; 
       return getStringKey(o.getId()); 
      } else { 
       throw new IllegalArgumentException("object " + object + " is of type " + object.getClass().getName() + "; expected type: " + ball.class.getName()); 
      } 
     } 
    } 
} 

ответ

2

ли следующий способ работает для вас?

JSF Page

<h:form> 
    <h:dataTable id="btable" value="#{ballController.items}" var="item"> 
     <h:column> 
      <h:outputText value="#{item.id}"/> 
     </h:column> 
     <h:column> 
      <h:outputText value="#{item.bname}"/> 
     </h:column> 
    </h:dataTable> 
    <h:commandButton action="#{ballController.retrieveItems}" value="Reload"> 
     <f:ajax execute="@form" render="btable" /> 
    </h:commandButton> 
</h:form> 

Контроллер

private DataModel items; 
//Getter and Setter Methods 

@PostConstruct 
public void init() { 
    items = getPagination().createPageDataModel(); 
} 

public void retrieveItems() { 
    items = getPagination().createPageDataModel(); 
} 
+0

привет, я получаю эту ошибку 'serverError: класс Index java.lang.IndexOutOfBoundsException: 0, Размер: 0' после нажатия reload button –

+0

@RowiePo вы отлаживали, где возникает эта проблема: в функции 'getPagination' или' createPageDataModel'? Это действительно ответ на поставленную в вопросе проблему. –

+0

@LuiggiMendoza У меня также есть функция create, я заметил, что после создания шара и вставки его в базу данных, когда я нажимаю функцию перезагрузки, эта ошибка появляется, но если я иду непосредственно в базу данных и вручную удаляю или добавляю данные , функция перезагрузки работает нормально. я обновлю вопрос и добавлю функцию create для проверки –

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