Как изменить местозаполнитель в ImageField с помощью Django? [Дубликат]

Короткий ответ

Поскольку отказоустойчивое поведение итератора не гарантируется.

Длинный ответ

Вы получаете это исключение, потому что вы

Плохо:

// we're using iterator
for (Iterator i = c.iterator(); i.hasNext();) {  
    // here, the collection will check it hasn't been modified (in effort to fail fast)
    String s = i.next();
    if(s.equals("lalala")) {
        // s is removed from the collection and the collection will take note it was modified
        c.remove(s);
    }
}

Хорошо:

// we're using iterator
for (Iterator i = c.iterator(); i.hasNext();) {  
    // here, the collection will check it hasn't been modified (in effort to fail fast)
    String s = i.next();
    if(s.equals("lalala")) {
        // s is removed from the collection through iterator, so the iterator knows the collection changed and can resume the iteration
        i.remove();
    }
}

Теперь, чтобы перейти к следующему элементу, «почему»: в приведенном выше коде обратите внимание на то, как выполняется проверка модификации - удаление помещает коллекцию как измененную, а следующая итерация проверяет любые изменения и терпит неудачу, если она обнаруживает изменение коллекции. Еще одна важная вещь: ArrayList (не уверенный в других сборниках) делает not проверкой на модификацию в hasNext().

Поэтому могут произойти две странные вещи:

  • Если вы удалите последний элемент во время итерации, ничего не будет выбрано. Это потому, что нет «следующего» элемента, поэтому итерация заканчивается до достижения кода проверки модификации
  • . Если вы удалите второй-последний элемент ArrayList.hasNext() будет также возвращать false, потому что итератор current index теперь указывает на последний элемент (бывший второй по-последнему). Таким образом, даже в этом случае после удаления нет «следующего» элемента

Обратите внимание, что все это соответствует документации ArrayList :

Обратите внимание, что неэффективное поведение итератора не может быть гарантировано, поскольку, как правило, невозможно сделать какие-либо серьезные гарантии при наличии несинхронизированной параллельной модификации. Неуправляемые итераторы бросают ConcurrentModificationException с максимальной эффективностью. Поэтому было бы неправильно писать программу, зависящую от этого исключения, за ее правильность: неудачное поведение итераторов должно использоваться только для обнаружения ошибок.

blockquote>

Отредактировано для добавления:

Этот вопрос дает некоторую информацию о том, почему проверка параллельной модификации не выполнена в hasNext() и выполняется только в next().

]
8
задан flybywire 22 September 2009 в 16:19
поделиться

2 ответа

Короткий ответ: вы не можете - он контролируется браузером.

Длинный ответ: вы можете переопределить его, используя некоторые хаки CSS .

11
ответ дан Greg 17 August 2018 в 23:10
поделиться
  • 1
    Это не похоже на какой-либо другой язык, я попробовал его в Firefox и IE11 с настройкой языка пользователя на французский язык. jsfiddle.net/BMF5t – Sameer 29 July 2014 в 21:30

Кнопка «Обзор» является частью загружаемого виджета и обычно соответствует языковым настройкам браузера пользователя. Вы можете полностью заменить его некоторыми js / ajax-y thingy, но я не вижу смысла.

6
ответ дан SilentGhost 17 August 2018 в 23:10
поделиться
  • 1
    например, чтобы изменить кнопку, измените настройки языка системы. – Quentin 22 September 2009 в 16:22
  • 2
    Я думаю, flybywire смотрит на него с точки зрения веб-сайта. – SilentGhost 22 September 2009 в 16:25
Другие вопросы по тегам:

Похожие вопросы: