Тот же корень дерева в p: treeTable внутри p: dataTable [duplicate]

Я думаю, что у меня более элегантный способ делегирования событий и захвата событий на window error, даже если резервное изображение не загружается.

img {
  width: 100px;
  height: 100px;
}
<script>
  window.addEventListener('error', windowErrorCb, {
    capture: true
  }, true)

  function windowErrorCb(event) {
    let target = event.target
    let isImg = target.tagName.toLowerCase() === 'img'
    if (isImg) {
      imgErrorCb()
      return
    }

    function imgErrorCb() {
      let isImgErrorHandled = target.hasAttribute('data-src-error')
      if (!isImgErrorHandled) {
        target.setAttribute('data-src-error', 'handled')
        target.src = 'backup.png'
      } else {
        //anything you want to do
        console.log(target.alt, 'both origin and backup image fail to load!');
      }
    }
  }
</script>
<img id="img" src="error1.png" alt="error1">
<img id="img" src="error2.png" alt="error2">
<img id="img" src="https://i.stack.imgur.com/ZXCE2.jpg" alt="avatar">

Точка:

  1. Поместить код в head и выполнить как первый встроенный скрипт. Таким образом, он будет выслушивать ошибки после сценария.
  2. Использовать захват событий, чтобы уловить ошибки, особенно для тех событий, которые не пузырятся.
  3. Использовать делегирование делегаций, которое позволяет избежать привязки события на каждом изображении.
  4. Дайте элементу ошибки img атрибут после предоставления им backup.png, чтобы избежать исчезновения backup.png и последующего бесконечного цикла, как показано ниже:

img ошибка-> резервная копия.png-> ошибка-> резервная копия.png-> ошибка -> ,,,,,

9
задан BalusC 9 August 2013 в 17:48
поделиться

1 ответ

Класс String является неизменным и не имеет установки для значения. Геттер - это в основном метод Object#toString().

Вам нужно получить / установить значение непосредственно на List. Вы можете сделать это по индексу списка, доступному по <ui:repeat varStatus>.

<ui:repeat value="#{mrBean.stringList}" varStatus="loop">
    <h:inputText value="#{mrBean.stringList[loop.index]}" />
</ui:repeat>

Вам также не нужен сеттер для stringList. EL получит элемент List#get(index) и установит элемент на List#add(index,item).

23
ответ дан BalusC 19 August 2018 в 16:33
поделиться
  • 1
    Благодаря! Я решил, что проблема связана с неизменными значениями, но я не знал, сможет ли JSF каким-то образом преодолеть это. Это действительно объясняет это так. – Ben 28 May 2012 в 12:53
  • 2
    Итак, loop.index здесь возвращает индекс текущего элемента списка? – user3663882 18 March 2015 в 14:43
  • 3
    Да, это так, благодаря varStatus. – Dinath 23 July 2018 в 13:22
Другие вопросы по тегам:

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