Мне нужна помощь в реализации операций CRUD. Мое приложение содержит таблицу объектов. Каждый объект описывается списком свойств (значений). Одно свойство изменяется с помощью специального редактора JSF, в зависимости от типа свойства.Добавление/редактирование операций с объектами с динамическими свойствами
Когда пользователь добавляет новую учетную запись, список редакторов определяется по типу объекта и отображается в форме с использованием тегов custom:include
. Этот настраиваемый тег используется для динамического включения редакторов <custom:include src="#{editor.component}">
. Свойство компонента указывает на расположение редактора JSF.
Каждый редактор имеет управляемый компонент, который реализует интерфейс ValueHolder
и наследует класс AbstractEditor
. AbstractEditor содержит метод updateEditor.
public interface ValueHolder {
String EDITOR_VALUES = "editorValues";
public Object getValue();
}
Я использую карту сеанса с именем редактора в качестве значения ключа и редактора как значения. Когда пользователь изменяет свойство, вызывается метод updateEditor, и карта обновляется с новым значением редактора.
Проблема заключается в объеме компонентов, стоящих за редакторами. Если я использую @SessionScoped beans, код, который инициализирует редактор, не вызывается снова, и я не могу обрабатывать действия add/edit. @SessionScoped работает только для добавления. Я пробовал с @RequestScoped, но бобы вызываются очень часто, и я не знаю, действительно ли это хорошо.
Я использую JSF2, PrimeFaces 3.0.M4 и Spring Web Flow для навигации.
'@ RequestScoped' - это то, что вам нужно использовать для чего-то подобного, но если вам не нравится, что бобы называются много раз, вы можете использовать' @ SessionScope' и «перезагрузить» его (вручную !) в конце метода 'updateEditor()' для «имитации» инициализации! – StepTNT
Можете ли вы привести мне пример? – Seitaridis