Пытаюсь работать с JSF и Facelets, но столкнулся с проблемой. Мне нужно через JavaScript изменять скрытые поля ввода на странице. Конкретно хочу при загрузке страницы записать в скрытое поле информацию о глубине цвета браузера пользователя.
Проблема в том, что JSF при обработке страницы меняет идентификаторы элементов. Как правильно получить доступ к этим элементам из JavaScript кода? Какой способ лучше всего использовать для такой задачи?
Буду благодарен за любые советы и примеры решения.
А что если просто через атрибут name обращаться? Я обычно ставлю name на элемент и потом использую document.getElementsByName(‘screenInfo’)[0]. Работает стабильно и не зависит от того как JSF переименовывает id. Или еще вариант - через классы CSS обращаться, добавляешь styleClass и ищешь по класу.
JSF действительно генерирует свои id, но есть несколько простых способов получить доступ к элементам. Один из них - использовать document.getElementById('#{component.clientId}') в твоем xhtml. В твоем случае это будет выглядеть так: onload="detectScreenInfo(document.getElementById('#{screenInfo.clientId}'))". Также, можно добавить prependId="false" к форме, чтобы сохранить исходный id, или использовать jQuery селектор $('[id$=screenInfo]'), который находит элемент, чье id заканчивается на screenInfo.