RICH:DataTable — добавить новую строку

#jsf #richfaces

#jsf #богатые интерфейсы

Вопрос:

как я могу добавить новую строку в extendedDataTable в конце списка? Есть ли какое-то решение?

Пример таблицы JSF:

введите описание изображения здесь

Вы можете мне помочь?

Обновить:

Я могу добавить новый элемент, используя, например, rich: PopupPanel, но не путем создания новой строки в datatable. То, что я хотел сказать, я могу сохранить, но не так элегантно, как при использовании руководства BalusCs JSF.

Часть XHTML:

 <rich:extendedDataTable 
 id="tableDetail"
 value="#{myBdeCheck.dataListBde}"
 var="bdeItem">

<rich:column width="80px">
  <f:facet name="header">
     <h:outputText value="Směna" />
  </f:facet>
  <h:outputText value="#{bdeItem.dayShift}"/>
</rich:column>

<rich:column width="70px">
  <f:facet name="header">
     <h:outputText value="Karta" />
  </f:facet>
  <h:outputText value="#{bdeItem.bdeno}"/>
</rich:column>
  

Часть компонента:
общий пакет;

 @ViewScoped
@ManagedBean(name="myBdeCheck")
public class MyBdeCheck extends Tools
{
  /**/
  private static final long serialVersionUID = -6586004426692130933L;

  private Session session; 
  private List<BDE> dataListBde; //= new ArrayList<BDE>();
  private int currentIndexDetail;   // index for BDEDetail datatable

  private BDECheckView editedWork;  // one item of BdeCheckView
  private BDE BDEItem;              // one item of BdeData

  // Constructor 
  public MyBdeCheck()
  {
    editedWork = new BDECheckView();
    BDEItem = new BDE();
  }

  /** GET DATA FROM BDEData *******************
   * @param personalNum, dayShift [whole day: YYYY-MM-DD%]
   */
  private void criteriaCheck()
  {
    try 
    {
      Criteria criteria = session.createCriteria(BDE.class);
      {some restrictions}
      dataListBde = criteria.list();
    }  
    catch (Exception e) {...}
   }

  public void saveBde()
  {    
    try
    {
      DaoCrud.update(dataListBde, 'R');  // ulozeni do dtb
    }
    catch  {...}  
  }

  public void saveNew() {...}

// and GETTERS AND SETTERS 
}
  

Комментарии:

1. какая версия richfaces / jsf?

2. можете ли вы просто добавить новый элемент в коллекцию, поддерживающую DataTable, а затем повторно отобразить компонент?

3. (я отредактировал свой пост) Я только добавляю новый элемент и повторно изменяю DataTable, но не использую collection

4. есть ли шанс, что вы могли бы опубликовать xhtml и вспомогательный компонент, чтобы мы могли увидеть, как это работает сейчас? Я думаю, было бы легче увидеть, чего вы пытаетесь достичь таким образом.

5. ОК. Итак, ваш список поддерживается коллекцией: private List<BDE> dataListBde;. Итак, если вы добавите новый BDE () в эту коллекцию и повторно измените datatable, появится ваша новая строка. Затем вы можете просто сохранить коллекцию, чтобы сохранить ее. чего мне не хватает?

Ответ №1:

Ваш DataTable моделирует коллекцию:

 private List<BDE> dataListBde;
  

Чтобы добавить новую строку, вам просто нужно добавить новый BDE() в коллекцию.

 this.dataListBde.add(new BDE());
  

Затем вы можете просто повторно отобразить свой DataTable, чтобы увидеть новую строку.

Наконец, в вашем xhtml вы можете условно отображать inputText или outputText:

 <rich:column width="70px">
    <f:facet name="header">
        <h:outputText value="Karta" />
    </f:facet>
    <h:outputText value="#{bdeItem.bdeno}" rendered="#{bdeItem.bdeno != null}"/>
    <h:inputText value="#{bdeItem.bdeno}" rendered="#{bdeItem.bdeno == null}"/>
</rich:column>
  

Комментарии:

1. Красиво и просто. Большое тебе спасибо, Дэйв! 🙂

Ответ №2:

Общий подход jsf заключался бы в добавлении пустого элемента в конец базового списка в вспомогательном компоненте, а затем в вашем DataTable отобразите, h:outputText если элемент row содержит данные и h:inputText или какой-либо другой входной компонент, если элемент row пуст.

Смотрите запись в блоге BalusC «Использование таблиц данных» для примера.

Адаптировать его к Richfaces не должно быть большой проблемой.

Комментарии:

1. Спасибо, я постараюсь это адаптировать. Мои таблицы JSF созданы с использованием руководства BalusC. Но я подумал, что в rich: DataTable могла бы быть включена такая функция…