Одно возможное решение, полезно, если вы хотите не только удалить некоторые вещи, но и сделать что-то со всеми элементами в одном цикле:
alist = ['good', 'bad', 'good', 'bad', 'good']
i = 0
for x in alist[:]:
if x == 'bad':
alist.pop(i)
i -= 1
# do something cool with x or just print x
print(x)
i += 1
Я ищу общий механизм, чтобы избежать повторной отправки формы, когда страница обновляется
blockquote>. Для этого существует как минимум 2 решения, которые не могут быть объединены:
- Выполните перенаправление после синхронного сообщения. Таким образом, обновление будет только повторно выполнять перенаправленный запрос GET вместо первоначального запроса. Недостаток: вы больше не можете использовать область запроса, чтобы обеспечить обратную связь с конечным пользователем. JSF 2.0 решил это, предложив новую область флэш-памяти . См. Также Как показать сообщение лиц на перенаправленной странице .
- Выполните POST асинхронно в фоновом режиме (используя ajax). Таким образом, обновление обновит только первоначальный запрос GET, который открыл форму. Вам нужно только убедиться, что эти формы изначально открыты только с помощью запроса GET, т. Е. Вы никогда не должны выполнять переключение между страницами по почте (что само по себе уже плохой дизайн). См. Также Когда следует использовать h: outputLink вместо h: commandLink?
или когда кнопка отправки нажата один раз снова
blockquote>Для этого в основном есть как минимум 2 решения, которые при необходимости можно объединить:
- Просто заблокируйте конечного пользователя от возможность нажать кнопку отправки во время отправки и / или после успешной отправки. Для этого существуют разные способы, в зависимости от конкретных функциональных и конструктивных требований. Вы можете использовать JavaScript для отключения кнопки во время отправки. Вы можете использовать атрибуты JFF
disabled
илиrendered
, чтобы отключить или скрыть кнопку после отправки. См. Также Как сделать предупреждение двойного щелчка в JSF 2 . Вы также можете использовать оверлейное окно во время обработки ajax-запросов для блокировки любого взаимодействия с пользователем. Для этой цели PrimeFaces имеет<p:blockUI>
.- Подтвердить уникальность недавно добавленного объекта на стороне сервера. Это намного надежнее, если вы абсолютно хотите избежать дублирования по техническим причинам, а не по функциональным причинам. Это довольно просто: поставьте ограничение
UNIQUE
на столбец DB, о котором идет речь. Если это ограничение нарушено, то база данных DB (и DB), такая как JPA), вызовет исключение нарушения ограничения. Это лучше всего сделать в сочетании с настраиваемым JSF-валидатором, который заранее проверяет ввод, выполнивSELECT
именно в этом столбце и проверив, не возвращается ли запись. JVF-валидатор позволяет отображать проблему во вкусе сообщения дружественных лиц. См. Также среди других Проверка формата и уникальности электронной почты для DB .
Вместо создания маркера вручную вы можете использовать решение BalusC. Он предложил шаблон Post-Redirect-GET в своем блоге
В этих ответах можно найти альтернативные решения: