Недавно я получил бизнес-требование для моего приложения JSF, чтобы редактировать строки таблицы данных в самой таблице.
Проблема :
таблица поддерживается списком объектов JPA, но редактируемые поля принадлежат их - необязательным - ассоциациям.Итак, в качестве примера такого редактируемого поля selectOneListbox
, если я это сделаю:
<h:selectOneListbox id="rca" value="#{mainEntity.associatedEntity.rca}" converter="omnifaces.SelectItemsConverter">
<f:selectItem itemValue="#{null}" itemLabel="" />
<f:selectItems value="#{rcaOptions}" var="rca" itemLabel="#{rca}" itemValue="#{rca}" />
</h:selectOneListbox>
Я в конечном итоге получаю Target Unreachable, 'associatedEntity' returned null
при отправке таблицы для тех строк, в которых еще нет связанной сущности, даже если я оставил selectOneListbox
неизменным для них (ноль)опция выбрана).
Вопросы :
как / где / когда я могу элегантно создавать новые элементы при отправке формы, только для тех строк, на которых действовал пользователь (ajax- желательно), предотвращая ошибку, показанную выше?Принудительное создание подмножеств в модели для всех строк при первом рендеринге таблицы ИМХО является недостатком дизайна.
Как программно игнорировать это selectOneListbox
- или любое другое поле ввода - извесь жизненный цикл JSF, условно, как если бы поле никогда не существовало в запросе?Я попытался реализовать несколько конвертеров и валидаторов, но фаза валидации все еще пытается получить ссылку на значение, независимо от того, что я пытаюсь, выдавая ошибку, показанную выше