Я думаю, что у меня более элегантный способ делегирования событий и захвата событий на 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">
Точка:
head
и выполнить как первый встроенный скрипт. Таким образом, он будет выслушивать ошибки после сценария. img
атрибут после предоставления им backup.png
, чтобы избежать исчезновения backup.png
и последующего бесконечного цикла, как показано ниже: img ошибка-> резервная копия.png-> ошибка-> резервная копия.png-> ошибка -> ,,,,,
Класс 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)
.
varStatus
. – Dinath 23 July 2018 в 13:22