У меня есть приложение JSF2 и страница со следующим кодом:
<h:inputText id="someInput" required="true" />
<p:outputPanel id="itemsPanel">
<ui:repeat var="i" value="#{myBean.itemIndices}" id="items">
<h:inputText
id="itemInput"
value="#{myBean.dataItems[i]}"
/>
<h:panelGroup
layout="block"
styleClass="clear"
rendered="#{((i+1) % 10 == 0)}"
/>
</ui:repeat>
</p:outputPanel>
<br/>
<p:commandButton
classStyle="btn"
value="Add Row"
actionListener="#{myBean.increaseItemsCount}"
update="itemsPanel"
immediate="false"
ajax="true"
/>
ui:repeat
динамически отображает число, если текстовые поля зависят от свойств itemIndices
и dataItems
.Кнопка «Добавить строку» вызывает метод, который динамически увеличивает количество itemIndices
и dataItems
, поэтому появляются дополнительные текстовые вводы.
Текущий код не будет работать, если в текстовом поле нет значения someInput
, поскольку запрос AJAX также проверяет форму и проверка завершается неудачно.Нажатие кнопки в этом случае не имеет никакого визуального эффекта, даже не дает пользователю понять, что проверка не прошла (потому что я обновляю только itemsPanel
).
Если я поменяю кнопку на immediate="true"
, то проблема проверки больше не будет.К сожалению, я хочу иметь возможность восстанавливать значения динамических полей ввода, которые пользователь мог изменить до добавления новой строки.Атрибут immediate="true"
приводит к тому, что форма не отправляется на сервер, поэтому введенные пользователем данные не будут сохраняться.
Возможным решением этой проблемы может быть добавление атрибута process="all dynamic input ids csv"
к командной кнопке и установка атрибута immediate
обратно на true
.Это заставит сервер проверять только входные данные, указанные в атрибуте процесса, и они будут сохранены.Проблема здесь в том, что эти входные идентификаторы динамически генерируются JSF, и я не могу придумать правильный способ получить их как CSV.Я также не предпочел бы решение для динамической генерации идентификаторов в myBean
, основанное на предположениях о том, как JSF будет выводить их.
Все предложения будут высоко оценены.