#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 могла бы быть включена такая функция…