RICH: dataTable - добавить новую строку - PullRequest
1 голос
/ 18 мая 2011

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

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

enter image description here

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

ОБНОВЛЕНИЕ :

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

Часть 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 
}

Ответы [ 2 ]

3 голосов
/ 18 мая 2011

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

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

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

2 голосов
/ 18 мая 2011

Ваша таблица данных моделирует коллекцию:

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